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

Java bleibt eine der beliebtesten Sprachen für die Entwicklung von Serveranwendungen, aber auch Konsolenprogramme werden regelmäßig damit geschrieben. Allerdings wird die manuelle Analyse von Befehlszeilenargumenten über args[] schnell chaotisch, sobald Optionen, Flags und verschachtelte Befehle hinzukommen. Hier helfen spezialisierte CLI-Frameworks. In diesem Artikel betrachten wir drei führende Tools: Picocli, JCommander und Spring Shell. Sie erfahren ihre Besonderheiten, sehen Codebeispiele und können das passende für Ihr Projekt auswählen.



1. Picocli – Modern und leistungsstark

Picocli (ausgesprochen „Pike-CLI“) ist ein leichtgewichtiges Framework mit minimalen Abhängigkeiten. Es unterstützt Annotationen, Autovervollständigung in der Shell, verschachtelte Befehle und sogar die Generierung von Hilfetexten im Manpage-Format. Picocli eignet sich ideal sowohl für einfache Dienstprogramme als auch für komplexe mehrstufige CLIs.



Beispiel eines einfachen Taschenrechners mit Picocli:

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

@Command(name = "calc", mixinStandardHelpOptions = true, version = "1.0", description = "Einfacher Taschenrechner")public class Calculator implements Runnable {

@Parameters(index = "0", description = "Erste Zahl") private double a;

@Parameters(index = "1", description = "Zweite Zahl") private double b;

@Option(names = {"-o", "--operation"}, defaultValue = "+", description = "Operation: +, -, *, /") private String operation;

@Override public void run() { double result = switch (operation) { case "+" -> a + b; case "-" -> a - b; case "*" -> a * b; case "/" -> a / b; default -> throw new IllegalArgumentException("Unbekannte Operation: " + operation); }; System.out.printf("Ergebnis: %.2f%n", result); }

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

Aufruf: java Calculator 10 5 -o "*" gibt Ergebnis: 50.00 aus. Picocli generiert automatisch eine Hilfe mit --help und die Version mit --version.



2. JCommander – Bewährt und zuverlässig

JCommander ist eine der ältesten Bibliotheken zur Argumentanalyse in Java. Sie verwendet Annotationen, bietet aber mehr manuelle Kontrolle über das Parsen. JCommander wird oft für Projekte gewählt, die Flexibilität und Integration mit vorhandenem Code erfordern.



Beispiel eines Währungsumrechners mit JCommander:

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

@Parameters(commandDescription = "Währungsumrechner")public class CurrencyConverter {

@Parameter(names = {"--amount", "-a"}, description = "Betrag", required = true) private Double amount;

@Parameter(names = {"--from", "-f"}, description = "Von welcher Währung (USD, EUR)", required = true) private String from;

@Parameter(names = {"--to", "-t"}, description = "In welche Währung", required = true) private String to;

@Parameter(names = {"--help", "-h"}, help = true, description = "Hilfe anzeigen") private boolean help;

public void run() { if (help) { JCommander jc = new JCommander(this); jc.usage(); return; } // Vereinfachte Umrechnungslogik double rate = switch (from.toUpperCase() + "_" + to.toUpperCase()) { case "USD_EUR" -> 0.92; case "EUR_USD" -> 1.09; default -> 1.0; }; System.out.printf("%.2f %s = %.2f %s%n", amount, from.toUpperCase(), amoun

Empfehlungen