CLI фреймворки для Kotlin: Clikt, kotlinx-cli, picocli — обзор и сравнение

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

CLI фреймворки для Kotlin: создаём мощные консольные приложения

Kotlin — современный язык, который отлично подходит не только для Android или серверной разработки, но и для создания консольных (CLI) приложений. Чтобы не писать парсинг аргументов вручную, существуют специализированные фреймворки. В этой статье мы разберём три самых популярных решения: Clikt, kotlinx-cli и picocli. Вы узнаете их особенности, увидите примеры кода и сможете выбрать подходящий инструмент для своего проекта.

Зачем нужен CLI фреймворк?

Создание утилит командной строки — задача, которая быстро усложняется: нужно обрабатывать флаги, опции, позиционные аргументы, выводить справку. Ручная реализация ведёт к ошибкам и дублированию кода. Фреймворки предлагают готовые механизмы:

  • Декларативное описание интерфейса команд
  • Автоматическая генерация справки (--help)
  • Валидация ввода
  • Поддержка подкоманд (git style)
  • Типобезопасность

1. Clikt — самый "котлиновский" фреймворк

Clikt (https://github.com/ajalt/clikt) — это чистая Kotlin-библиотека, которая использует DSL и делегированные свойства. Она не зависит от Java-аннотаций и предлагает интуитивный API.

Установка

// build.gradle.kts
implementation("com.github.ajalt.clikt:clikt:4.2.2")

Пример: простой калькулятор

import com.github.ajalt.clikt.core.CliktCommand
import com.github.ajalt.clikt.parameters.arguments.argument
import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.types.int

class Calc : CliktCommand() {
    val a: Int by argument()
    val b: Int by argument()
    val multiply by option("--mult", "-m", help = "Умножить, а не сложить").flag()

    override fun run() {
        val result = if (multiply) a * b else a + b
        echo("Результат: $result")
    }
}

fun main(args: Array<String>) = Calc().main(args)

Запуск: kotlin calc 5 3 --mult → Результат: 15.

Преимущества Clikt:

  • Полная интеграция с Kotlin (DSL, делегаты)
  • Мощная система валидации (custom validators)
  • Поддержка подкоманд любой глубины
  • Автоматическая генерация man-страниц
  • Активное сообщество и обновления

2. kotlinx-cli — лёгкое решение от JetBrains

kotlinx-cli — экспериментальная библиотека, входящая в экосистему Kotlin. Она минималистична и подходит для небольших утилит.

Установка

// build.gradle.kts
implementation("org.jetbrains.kotlinx:kotlinx-cli:0.3.6")

Пример: приветствие

import kotlinx.cli.*

fun main(args: Array<String>) {
    val parser = ArgParser("greet")
    val name by parser.option(ArgType.String, shortName = "n", description = "Имя")
        .default("мир")
    val times by parser.option(ArgType.Int, shortName = "t", description = "Количество раз")
        .default(1)

    parser.parse(args)

    repeat(times) {
        println("Привет, $name!")
    }
}

Запуск: kotlin greet -n Котлин -t 2 → Привет, Котлин! (дважды).

Особенности kotlinx-cli:

  • Очень простой API — минимум кода
  • Поддержка базовых типов (String, Int, Boolean)
  • Плохо подходит для сложных иерархий команд
  • Статус экспериментальности (может меняться API)
  • Нет встроенной валидации и подсказок

3. picocli — мощный фреймворк с Java-корнями

picocli — это популярный фреймворк, который работает как с Java, так и с Kotlin. Он использует аннотации, но имеет специальную поддержку Kotlin DSL.

Установка

                    

Рекомендаций