CLI-Frameworks für Java: Überblick und Vergleich der besten Tools

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 Java: Leistungsstarke Konsolenanwendungen erstellen



Die Entwicklung komplexer Konsolenanwendungen in Java erfordert nicht nur Logik, sondern auch eine benutzerfreundliche Kommandozeilenschnittstelle (CLI). Das manuelle Parsen von Argumenten, die Verarbeitung von Optionen und die Ausgabe von Hilfetexten sind aufwändig und fehleranfällig. Glücklicherweise gibt es ausgereifte CLI-Frameworks, die diesen Prozess automatisieren. In diesem Artikel betrachten wir drei führende Tools im Detail: Picocli, JCommander und Spring Shell, mit Codebeispielen und Empfehlungen zur Auswahl.



1. Picocli – Modern und leistungsstark



Picocli (https://picocli.info/) ist das derzeit beliebteste CLI-Framework für Java. Sein Hauptvorteil ist eine minimalistische, auf Annotationen basierende API und die Unterstützung von Java sowie Kotlin, Groovy und Scala. Die Bibliothek benötigt keine externen Abhängigkeiten und kann Auto-Vervollständigung für Bash, Zsh und Fish generieren.



Hauptfunktionen von Picocli:

  • Annotationen @Command, @Option, @Parameters
  • Automatische Generierung von Hilfetexten (--help)
  • Verschachtelte Befehle (Unterbefehle)
  • Unterstützung von Werttypen (int, boolean, enum, LocalDate)
  • Benutzerdefinierte Konverter und Validatoren


Beispiel einer einfachen Anwendung mit Picocli:

import picocli.CommandLine;import picocli.CommandLine.Command;import picocli.CommandLine.Option;import picocli.CommandLine.Parameters;

@Command(name = "greet", description = "Begrüßt den Benutzer")public class GreetApp implements Runnable {

@Option(names = {"-n", "--name"}, defaultValue = "Welt", description = "Name für die Begrüßung") private String name;

@Option(names = {"-c", "--count"}, defaultValue = "1", description = "Anzahl der Wiederholungen") private int count;

@Override public void run() { for (int i = 0; i < count; i++) { System.out.println("Hallo, " + name + "!"); } }

public static void main(String[] args) { int exitCode = new CommandLine(new GreetApp()).execute(args); System.exit(exitCode); }}


Ausführung:

java GreetApp --name="Java-Entwickler" --count=3


Ausgabe:

Hallo, Java-Entwickler!Hallo, Java-Entwickler!Hallo, Java-Entwickler!


2. JCommander – Bewährter Klassiker



JCommander (https://jcommander.org/) ist eine ausgereifte Bibliothek mit einer langen Geschichte (seit 2011). Sie verwendet ebenfalls Annotationen, bietet aber eine flexiblere Architektur für komplexe Szenarien. JCommander eignet sich besonders für Projekte, die eine strenge Kontrolle über das Parsen und die Fehlerbehandlung erfordern.



Wesentliche Merkmale von JCommander:

  • Annotationen @Parameter mit Attributen names, required, description
  • Unterstützung mehrstufiger Befehle über Commands
  • Integrierter Parameter-Validator
  • Möglichkeit zur Verwendung beliebiger Typen über Konverter


Beispiel mit JCommander:

import com.beust.jcommander.JCommander;import com.beust.jcommander.Parameter;import com.beust.jcommander.Parameters;

@Parameters(commandDescription = "Taschenrechner")public class Calculator {

@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() { int result; switch (operation) { case "add": result = a + b; break; case "sub": result = a - b; break; case "mul

Empfehlungen