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 exitFortgeschrittenes 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 Auch in der Bibliothek
Symfony/Mailer für PHP: Komplettanleitung mit Beispielen
SpriteKit für Swift: Komplettes Tutorial mit Beispielen
Datenbankmigrationen in TypeScript: Vollständiger Leitfaden zu Tools und Ansätzen
PHP-Aufgabenplaner: cron-ähnliche Aufgaben ohne crond
Sarama für Go: Vollständiges Tutorial mit Beispielen