Frameworks CLI pour Java : aperçu et comparaison des meilleurs outils

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é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=3


Sortie :

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 @Parameter avec les attributs names, 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

Recommendations