Frameworks CLI pour Java : créer des applications console puissantes
Le développement d'applications console complexes en Java nécessite non seulement de la logique, mais aussi une interface en ligne de commande (CLI) pratique. L'analyse des arguments, la gestion des options, l'affichage de l'aide — l'implémentation manuelle de ces tâches est laborieuse et sujette aux erreurs. Heureusement, il existe des frameworks CLI matures qui automatisent ce processus. Dans cet article, nous allons détailler trois outils majeurs : Picocli, JCommander et Spring Shell, avec des exemples de code et des recommandations pour faire votre choix.
1. Picocli — moderne et performant
Picocli (https://picocli.info/) est le framework CLI le plus populaire pour Java aujourd'hui. Son principal avantage est une API minimaliste basée sur les annotations, ainsi que la prise en charge de Java, Kotlin, Groovy et Scala. La bibliothèque ne nécessite aucune dépendance externe et peut générer l'autocomplétion pour Bash, Zsh et Fish.
Fonctionnalités principales de Picocli :
- Annotations
@Command,@Option,@Parameters - Génération automatique de l'aide (
--help) - Commandes imbriquées (sous-commandes)
- Prise en charge des types de valeurs (int, boolean, enum, LocalDate)
- Convertisseurs et validateurs personnalisés
Exemple d'application simple avec Picocli :
import picocli.CommandLine;import picocli.CommandLine.Command;import picocli.CommandLine.Option;import picocli.CommandLine.Parameters;
@Command(name = "greet", description = "Salue l'utilisateur")public class GreetApp implements Runnable {
@Option(names = {"-n", "--name"}, defaultValue = "monde", description = "Nom pour le salut") private String name;
@Option(names = {"-c", "--count"}, defaultValue = "1", description = "Nombre de répétitions") private int count;
@Override public void run() { for (int i = 0; i < count; i++) { System.out.println("Bonjour, " + name + " !"); } }
public static void main(String[] args) { int exitCode = new CommandLine(new GreetApp()).execute(args); System.exit(exitCode); }}Exécution :
java GreetApp --name="Développeur Java" --count=3Sortie :
Bonjour, Développeur Java !Bonjour, Développeur Java !Bonjour, Développeur Java !2. JCommander — un classique éprouvé
JCommander (https://jcommander.org/) est une bibliothèque mature avec une riche histoire (depuis 2011). Elle utilise également les annotations, mais offre une architecture plus flexible pour les scénarios complexes. JCommander est particulièrement adapté aux projets nécessitant un contrôle strict de l'analyse et de la gestion des erreurs.
Caractéristiques clés de JCommander :
- Annotations
@Parameteravec les attributsnames,required,description - Prise en charge des commandes multi-niveaux via
Commands - Validateur de paramètres intégré
- Possibilité d'utiliser des types arbitraires via des convertisseurs
Exemple avec JCommander :
import com.beust.jcommander.JCommander;import com.beust.jcommander.Parameter;import com.beust.jcommander.Parameters;
@Parameters(commandDescription = "Calculatrice")public class Calculator {
@Parameter(names = {"--a"}, description = "Premier nombre", required = true) private int a;
@Parameter(names = {"--b"}, description = "Deuxième nombre", required = true) private int b;
@Parameter(names = {"--op"}, description = "Opération : 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 Aussi dans la bibliothèque
Client Elasticsearch pour PHP : elasticsearch-php — guide complet
Bibliothèques GraphQL Kotlin : aperçu complet pour les développeurs backend
Conteneur d'injection de dépendances pour JavaScript (Node.js) — Awilix
Configuration d'applications JavaScript : la bibliothèque config
Traitement d'images en PHP : resize, crop (recadrage et redimensionnement)