CLI-Frameworks für Kotlin: Clikt, kotlinx-cli, picocli – Überblick und Vergleich

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

CLI-Frameworks für Kotlin: Leistungsstarke Konsolenanwendungen erstellen



Kotlin ist eine moderne Sprache, die sich nicht nur für Android oder die Backend-Entwicklung eignet, sondern auch hervorragend für die Erstellung von Konsolen- (CLI) Anwendungen. Um das Parsen von Argumenten nicht manuell schreiben zu müssen, gibt es spezialisierte Frameworks. In diesem Artikel betrachten wir die drei beliebtesten Lösungen: Clikt, kotlinx-cli und picocli. Sie erfahren ihre Besonderheiten, sehen Codebeispiele und können das passende Werkzeug für Ihr Projekt auswählen.



Wozu ein CLI-Framework?

Die Erstellung von Kommandozeilenwerkzeugen ist eine Aufgabe, die schnell komplex wird: Flags, Optionen, Positionsargumente müssen verarbeitet und Hilfetexte ausgegeben werden. Eine manuelle Implementierung führt zu Fehlern und Code-Duplizierung. Frameworks bieten fertige Mechanismen:

  • Deklarative Beschreibung der Befehlsschnittstelle
  • Automatische Generierung von Hilfetexten (--help)
  • Eingabevalidierung
  • Unterstützung von Unterbefehlen (Git-Stil)
  • Typsicherheit


1. Clikt – Das "kotlinischste" Framework

Clikt (https://github.com/ajalt/clikt) ist eine reine Kotlin-Bibliothek, die DSL und delegierte Eigenschaften verwendet. Sie ist unabhängig von Java-Annotationen und bietet eine intuitive API.



Installation

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


Beispiel: Ein einfacher Taschenrechner

import com.github.ajalt.clikt.core.CliktCommandimport com.github.ajalt.clikt.parameters.arguments.argumentimport com.github.ajalt.clikt.parameters.options.optionimport 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 = "Multiplizieren, nicht addieren").flag()

override fun run() { val result = if (multiply) a * b else a + b echo("Ergebnis: $result") }}

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


Aufruf: kotlin calc 5 3 --mult → Ergebnis: 15.



Vorteile von Clikt:

  • Vollständige Integration mit Kotlin (DSL, Delegaten)
  • Leistungsstarkes Validierungssystem (benutzerdefinierte Validatoren)
  • Unterstützung für Unterbefehle beliebiger Tiefe
  • Automatische Generierung von Man-Seiten
  • Aktive Community und regelmäßige Updates


2. kotlinx-cli – Eine leichte Lösung von JetBrains

kotlinx-cli ist eine experimentelle Bibliothek, die Teil des Kotlin-Ökosystems ist. Sie ist minimalistisch und eignet sich für kleine Dienstprogramme.



Installation

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


Beispiel: Begrüßung

import kotlinx.cli.*

fun main(args: Array<String>) { val parser = ArgParser("greet") val name by parser.option(ArgType.String, shortName = "n", description = "Name") .default("Welt") val times by parser.option(ArgType.Int, shortName = "t", description = "Anzahl der Wiederholungen") .default(1)

parser.parse(args)

repeat(times) { println("Hallo, $name!") }}


Aufruf: kotlin greet -n Kotlin -t 2 → Hallo, Kotlin! (zweimal).



Besonderheiten von kotlinx-cli:

  • Sehr einfache API – minimaler Code
  • Unterstützung grundlegender Typen (String, Int, Boolean)
  • Weniger geeignet für komplexe Befehlshierarchien
  • Experimenteller Status (API kann sich ändern)
  • Keine integrierte Validierung und Vorschläge


3. picocli – Leistungsstarkes Framework mit Java-Wurzeln

picocli ist ein beliebtes Framework, das sowohl mit Java als auch mit Kotlin funktioniert. Es verwendet Annotationen, bietet aber spezielle Unterstützung für die Kotlin-DSL.

Empfehlungen