CLI-Frameworks für Java: Picocli, JCommander und Spring Shell

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 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 @Parameter mit 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

Empfehlungen