CLI-Frameworks für Java: Leistungsstarke Konsolenanwendungen erstellen
Die Entwicklung von Konsolen- (CLI) Anwendungen in Java ist eine Aufgabe, vor der jeder Entwickler steht. Die manuelle Verarbeitung von Kommandozeilenargumenten über main(String[] args) wird schnell umständlich und fehleranfällig. Glücklicherweise gibt es im Java-Ökosystem ausgereifte Frameworks, die das Parsen, die Validierung, die Autovervollständigung und die Generierung von Hilfetexten übernehmen. In diesem Artikel betrachten wir drei führende Werkzeuge: Picocli, JCommander und Spring Shell.
1. Picocli – modern und leistungsstark
Picocli ist ein Framework mit minimaler Größe (nur 1,5 MB), das keine externen Abhängigkeiten erfordert. Es unterstützt Annotationen, Autovervollständigung für Bash/Zsh und eine integrierte Hilfegenerierung. Picocli ist ideal für Microservices und Kommandozeilenwerkzeuge.
Hauptfunktionen:
- Annotationen
@Command,@Option,@Parameters - Verschachtelte Unterbefehle (subcommands)
- Typisierte Parameter (int, boolean, enum, Sammlungen)
- Automatische Validierung (erforderliche Parameter, Bereiche)
- Farbige Ausgabe und Fortschrittsbalken
- Native GraalVM-Kompilierung
Codebeispiel:
import picocli.CommandLine;import picocli.CommandLine.Command;import picocli.CommandLine.Option;import picocli.CommandLine.Parameters;
@Command(name = "greet", description = "Benutzer begrüßen")public class GreetCommand implements Runnable {
@Option(names = {"-n", "--name"}, description = "Name des Benutzers", required = true) private String name;
@Option(names = {"-c", "--count"}, description = "Anzahl der Wiederholungen", defaultValue = "1") private int count;
@Parameters(index = "0", description = "Nachricht", defaultValue = "Hallo") private String message;
@Override public void run() { for (int i = 0; i < count; i++) { System.out.println(message + ", " + name + "!"); } }
public static void main(String[] args) { int exitCode = new CommandLine(new GreetCommand()).execute(args); System.exit(exitCode); }}Aufruf: java GreetCommand -n Welt -c 2 "Hallo" gibt aus:
Hallo, Welt!Hallo, Welt!2. JCommander – bewährt und zuverlässig
JCommander ist eines der ältesten CLI-Frameworks (seit 2010) und wird in Projekten wie Jenkins und TestNG verwendet. Es unterstützt Annotationen, komplexe Typen und Internationalisierung. JCommander zeichnet sich durch eine einfache API und eine hervorragende Dokumentation aus.
Wesentliche Merkmale:
- Annotationen
@Parametermit Namen und Beschreibungen - Unterstützung für verschachtelte Befehle über
JCommander.addCommand() - Validierung über benutzerdefinierte
IParameterValidator - Hilfegenerierung mit
usage() - Arbeit mit Konfigurationsdateien
Codebeispiel:
import com.beust.jcommander.JCommander;import com.beust.jcommander.Parameter;import com.beust.jcommander.Parameters;
@Parameters(commandDescription = "Taschenrechner")public class CalculatorCommand {
@Parameter(names = {"--a"}, description = "Erste Zahl", required = true) private int a;
@Parameter(names = {"--b"}, description = "Zweite Zahl", required = true) private int b;
@Parameter(names = {"--op"}, description = "Operation: add/sub/mul/div") private String operation = "add";
public void run() { double result; switch (operation) { case "add": result = a + b; break; case "sub": result = a - b; break; case "mul": result = a * b; break; case "div": result Auch in der Bibliothek
Arbeiten mit Bildern in Java: Vom Lesen bis zur Verarbeitung
Timber für Kotlin: Vollständige Anleitung mit Beispielen
Serilog für C# (.NET): Vollständige Anleitung mit Beispielen