Frameworks CLI pour Java : créons des applications console puissantes
Java reste l'un des langages les plus populaires pour créer des applications serveur, mais des utilitaires console y sont également écrits régulièrement. Cependant, l'analyse manuelle des arguments de ligne de commande via args[] se transforme rapidement en chaos dès l'apparition d'options, de drapeaux et de commandes imbriquées. Des frameworks CLI spécialisés viennent à la rescousse. Dans cet article, nous examinerons trois outils leaders : Picocli, JCommander et Spring Shell. Vous découvrirez leurs caractéristiques, verrez des exemples de code et pourrez choisir celui qui convient à votre projet.
1. Picocli — moderne et performant
Picocli (prononcé « païk-cli ») est un framework léger avec des dépendances minimales. Il prend en charge les annotations, l'auto-complétion dans le shell, les commandes imbriquées et même la génération d'aide au format de page man. Picocli est idéal pour créer à la fois des utilitaires simples et des CLI complexes à plusieurs niveaux.
Exemple d'une calculatrice basique avec 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 = "Calculatrice simple")public class Calculator implements Runnable {
@Parameters(index = "0", description = "Premier nombre") private double a;
@Parameters(index = "1", description = "Deuxième nombre") private double b;
@Option(names = {"-o", "--operation"}, defaultValue = "+", description = "Opération : +, -, *, /") 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("Opération inconnue : " + operation); }; System.out.printf("Résultat : %.2f%n", result); }
public static void main(String[] args) { int exitCode = new CommandLine(new Calculator()).execute(args); System.exit(exitCode); }}Exécution : java Calculator 10 5 -o "*" affichera Résultat : 50.00. Picocli générera automatiquement l'aide avec --help et la version avec --version.
2. JCommander — éprouvé par le temps
JCommander est l'une des plus anciennes bibliothèques d'analyse d'arguments en Java. Elle utilise des annotations, mais offre plus de contrôle manuel sur l'analyse. JCommander est souvent choisi pour les projets nécessitant flexibilité et intégration avec du code existant.
Exemple d'un convertisseur de devises avec JCommander :
import com.beust.jcommander.JCommander;import com.beust.jcommander.Parameter;import com.beust.jcommander.Parameters;
@Parameters(commandDescription = "Convertisseur de devises")public class CurrencyConverter {
@Parameter(names = {"--amount", "-a"}, description = "Montant", required = true) private Double amount;
@Parameter(names = {"--from", "-f"}, description = "Devise source (USD, EUR)", required = true) private String from;
@Parameter(names = {"--to", "-t"}, description = "Devise cible", required = true) private String to;
@Parameter(names = {"--help", "-h"}, help = true, description = "Afficher l'aide") private boolean help;
public void run() { if (help) { JCommander jc = new JCommander(this); jc.usage(); return; } // Logique de conversion simplifiée 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 Aussi dans la bibliothèque
mapstructure Go : guide complet avec exemples pratiques
Parsing HTML en Swift (iOS/macOS) : bibliothèques SwiftSoup et Fuzi
Diesel pour Rust : guide complet avec exemples
Client Redis (go-redis) pour Go : guide complet avec exemples