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.
Auch in der Bibliothek
ExcelJS für JavaScript (Node.js): Komplette Anleitung mit Beispielen
Gin für Go: Vollständiger Leitfaden mit Beispielen
Maschinelles Lernen mit Go: Überblick über Bibliotheken für Golang
HTML-Parsing in Java: Die besten Bibliotheken und Codebeispiele