102 votes

Bibliothèque Java pour l'analyse des paramètres de la ligne de commande ?

J'écris une petite application de ligne de commande en Java. Cette application doit fonctionner avec un mélange de paramètres et de commandes, similaire à svn .

Exemples

app url command1
app url command2 --parameter2 -x
app url command1 --param-with-argument argument
app --parameter url command1
app --no-url command2
app --help

Recherché

  • Il existe une bibliothèque facile à utiliser pour Java
  • Prise en charge de l'analyse syntaxique de ces lignes de commande
  • (Bonus) Crée automatiquement une aide appropriée

68voto

matt b Points 73770

Je suis un fan de CLI de Commons .

Vous pouvez le configurer pour qu'il comprenne les commandes, les drapeaux (avec des noms courts et longs), qu'il sache si certaines commandes/commutateurs sont nécessaires ou non, ou s'ils ont des valeurs par défaut. Il dispose même d'une fonctionnalité permettant d'imprimer un --help message type.

El Scénarios d'utilisation contient quelques bons exemples de son utilisation.

45voto

Vitaly Points 633

Essayer `` : http://args4j.kohsuke.org

Je préfère `` à Commons CLI. (Et j’ai utilisé à la fois).

Avec `` , vous n’avez pas besoin d’appeler toutes les fonctions. Tout est fait pour vous ! (Les paramètres sont réglés aux champs de l’objet par réflexion).

28voto

Alain O'Dea Points 6587

JewelCLI est un Bibliothèque Java pour l'analyse syntaxique des lignes de commande qui produit un code propre . Il utilise des interfaces proxy configurées avec des annotations pour construire dynamiquement une API sécurisée pour vos paramètres de ligne de commande.

Un exemple d'interface de paramètres Person.java :

import uk.co.flamingpenguin.jewel.cli.Option;

public interface Person {
    @Option String getName();
    @Option int getTimes();
}

Un exemple d'utilisation de l'interface des paramètres Hello.java :

import static uk.co.flamingpenguin.jewel.cli.CliFactory.parseArguments;
import uk.co.flamingpenguin.jewel.cli.ArgumentValidationException;

public class Hello {
    public static void main(String [] args) {
        try {
            Person person = parseArguments(Person.class, args);
            for (int i = 0; i < person.getTimes(); i++)
                System.out.println("Hello " +  person.getName());
        } catch(ArgumentValidationException e) {
            System.err.println(e.getMessage());
        }
    }
}

Sauvegardez des copies des fichiers ci-dessus dans un seul répertoire et téléchargez l'application JewelCLI 0.7.6 JAR dans ce répertoire également.

Compilez et exécutez l'exemple en Bash sur Linux/Mac OS X/etc :

javac -cp jewelcli-0.7.6.jar:. Person.java Hello.java
java -cp jewelcli-0.7.6.jar:. Hello --name="John Doe" --times=3

Compilez et exécutez l'exemple dans l'invite de commande Windows :

javac -cp jewelcli-0.7.6.jar;. Person.java Hello.java
java -cp jewelcli-0.7.6.jar;. Hello --name="John Doe" --times=3

L'exécution de l'exemple devrait produire le résultat suivant :

Hello John Doe
Hello John Doe
Hello John Doe

26voto

Ivar Points 715

Voici une relativement jusqu'à ce jour (octobre 2013) liste des bibliothèques de répondre à votre question.

Si vous êtes à la recherche d'une recommandation, je recommande JOpt Simple ou JewelCli.

14voto

Jean Points 9655

Pour être complet, ajoutons JCommander. https://github.com/cbeust/jcommander

public class JCommanderTest {
    @Parameter
    public List<String> parameters = Lists.newArrayList();

    @Parameter(names = { "-log", "-verbose" }, description = "Level of verbosity")
    public Integer verbose = 1;

    @Parameter(names = "-groups", description = "Comma-separated list of group names to be run")
    public String groups;

    @Parameter(names = "-debug", description = "Debug mode")
    public boolean debug = false;
}

et un exemple d'utilisation

CommanderTest jct = new JCommanderTest();
String[] argv = { "-log", "2", "-groups", "unit", "a", "b", "c" };
new JCommander(jct, argv);

Assert.assertEquals(jct.verbose.intValue(), 2);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X