Frameworks CLI pour Java : Picocli, JCommander et Spring Shell

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Frameworks CLI pour Java : créons des applications console puissantes



Le développement d'applications console (CLI) en Java est une tâche que chaque développeur rencontre. Le traitement manuel des arguments de ligne de commande via main(String[] args) devient rapidement lourd et sujet aux erreurs. Heureusement, l'écosystème Java dispose de frameworks matures qui prennent en charge l'analyse, la validation, l'auto-complétion et la génération d'aide. Dans cet article, nous examinerons trois outils de premier plan : Picocli, JCommander et Spring Shell.



1. Picocli — moderne et performant



Picocli est un framework de taille minimale (seulement 1,5 Mo) qui ne nécessite aucune dépendance externe. Il prend en charge les annotations, l'auto-complétion pour Bash/Zsh et la génération d'aide intégrée. Picocli est idéal pour les microservices et les outils en ligne de commande.



Fonctionnalités principales :

  • Annotations @Command, @Option, @Parameters
  • Sous-commandes imbriquées (subcommands)
  • Paramètres typés (int, boolean, enum, collections)
  • Validation automatique (paramètres obligatoires, plages)
  • Sortie colorée et barres de progression
  • Compilation native GraalVM


Exemple de code :

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

@Command(name = "greet", description = "Salutation de l'utilisateur")public class GreetCommand implements Runnable {

@Option(names = {"-n", "--name"}, description = "Nom de l'utilisateur", required = true) private String name;

@Option(names = {"-c", "--count"}, description = "Nombre de répétitions", defaultValue = "1") private int count;

@Parameters(index = "0", description = "Message", defaultValue = "Bonjour") 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); }}


Exécution : java GreetCommand -n Monde -c 2 "Bonjour" affichera :

Bonjour, Monde!Bonjour, Monde!


2. JCommander — éprouvé par le temps



JCommander est l'un des plus anciens frameworks CLI (depuis 2010), utilisé dans des projets comme Jenkins et TestNG. Il prend en charge les annotations, les types complexes et l'internationalisation. JCommander se distingue par la simplicité de son API et une excellente documentation.



Caractéristiques clés :

  • Annotations @Parameter avec noms et descriptions
  • Prise en charge des commandes imbriquées via JCommander.addCommand()
  • Validation via des IParameterValidator personnalisés
  • Génération d'aide avec usage()
  • Travail avec des fichiers de configuration


Exemple de code :

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

@Parameters(commandDescription = "Calculatrice")public class CalculatorCommand {

@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() { 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

Recommendations