Clikt: Leistungsstarkes CLI-Framework für Kotlin mit deklarativem Syntax

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

Clikt: Leistungsstarkes CLI-Framework für Kotlin



Clikt ist ein modernes, leichtgewichtiges Framework zur Erstellung von Konsolen- (CLI) Anwendungen in der Sprache Kotlin. Im Gegensatz zu vielen anderen Bibliotheken verwendet Clikt einen deklarativen Ansatz, der es ermöglicht, die Struktur von Befehlen und deren Parameter mit einfachen Annotationen und Lambda-Ausdrücken zu beschreiben. Dies macht den Code sauber, lesbar und leicht wartbar. Die Bibliothek eignet sich ideal sowohl für kleine Dienstprogramme als auch für komplexe mehrstufige Kommandozeilenschnittstellen.



Schlüsselfunktionen von Clikt



  • Deklarativer Syntax: Definition von Befehlen, Optionen und Argumenten über DSL (Domain Specific Language) oder Annotationen.
  • Automatische Hilfegenerierung: Clikt erstellt automatisch eine schöne und strukturierte --help-Nachricht basierend auf Ihren Definitionen.
  • Unterstützung für verschachtelte Befehle: Erstellen Sie Befehlshierarchien (z. B. git commit, git push) mit einem einfachen Mechanismus für Unterbefehle.
  • Wertvalidierung: Integrierte Mechanismen zur Überprüfung von Typen, Bereichen, Formaten und benutzerdefinierten Bedingungen.
  • Autovervollständigung: Native Unterstützung für die Generierung von Autovervollständigungsskripten für Bash, Zsh und Fish.
  • Testbarkeit: Praktische Werkzeuge zum Testen von CLI-Anwendungen ohne tatsächlichen Start im Terminal.


Installation und Einbindung



Fügen Sie zunächst die Abhängigkeit zu Ihrer build.gradle.kts hinzu:



repositories {    mavenCentral()}

dependencies { implementation("com.github.ajalt.clikt:clikt:4.4.0")}


Für Maven verwenden Sie:



<dependency>    <groupId>com.github.ajalt.clikt</groupId>    <artifactId>clikt</artifactId>    <version>4.4.0</version></dependency>


Basisbeispiel: Begrüßung



Erstellen wir einen einfachen Befehl, der einen Benutzernamen und ein optionales Flag für die Begrüßung in verschiedenen Sprachen akzeptiert.



import com.github.ajalt.clikt.core.CliktCommandimport com.github.ajalt.clikt.parameters.arguments.argumentimport com.github.ajalt.clikt.parameters.options.flagimport com.github.ajalt.clikt.parameters.options.option

class Greet : CliktCommand() { val name: String by argument(help = "Benutzername") val formal: Boolean by option("--formal", "-f", help = "Formelle Begrüßung").flag()

override fun run() { val greeting = if (formal) "Guten Tag" else "Hallo" echo("$greeting, $name!") }}

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


Ausführung über die Kommandozeile:



$ kotlin greet.kts IvanHallo, Ivan!

$ kotlin greet.kts --formal IvanGuten Tag, Ivan!

$ kotlin greet.kts --helpUsage: greet [<options>] <name>

Benutzername

Options: -f, --formal Formelle Begrüßung -h, --help Show this message and exit


Fortgeschrittenes Beispiel: Arbeiten mit Dateien und Unterbefehlen



Betrachten wir ein komplexeres Szenario – ein Dienstprogramm für die Arbeit mit Textdateien mit Unterstützung für die Unterbefehle count und search.



import com.github.ajalt.clikt.core.CliktCommandimport com.github.ajalt.clikt.core.subcommandsimport com.github.ajalt.clikt.parameters.arguments.argumentimport com.github.ajalt.clikt.parameters.options.defaultimport com.github.ajalt.clikt.parameters.options.optionimport java.io.File

class FileTool : CliktCommand() { override fun run() = Unit // Root-Befehl tut nichts}

class Count : CliktCommand(help = "Zeilen in Datei zählen") { val file: File by argument(help = "Pfad zur Datei") .validate { require(it.exists()) { "Datei nicht gefunden: $it" } }

override f

Empfehlungen