2010-07-22 4 views
23

Pour l'analyse de ligne de commande en Java, j'utilise généralement Apache Commons CLI. Quelqu'un peut-il recommander des bibliothèques alternatives?Analyse syntaxique en ligne de commande: alternatives CLI Commons?

+7

Si vous voulez demander une alternative à ce que vous utilisez normalement, il serait utile de dire ce que vous cherchez que votre option normale ne fournit pas. –

+1

Pour être honnête, je n'avais pas de fonctionnalité manquante particulière à l'esprit. Certes, Apache Commons CLI est «essayé et testé», mais il est également assez verbeux. Je me demandais simplement si quelqu'un a introduit de nouvelles idées dans ce domaine. Dans cette catégorie, je pense que je vais regarder de plus près la suggestion JCommander ci-dessous. – Jan

+6

duplication possible de [Existe-t-il un bon analyseur d'argument de ligne de commande pour Java?] (Http://stackoverflow.com/questions/367706/is-there-a-good-command-line-argument-parser-for-java) –

Répondre

21

JCommander ressemble à une approche très simple et intéressant de l'analyse syntaxique des arguments de ligne de commande avec annotations (du créateur de TestNG):

Vous annoter des champs avec des descriptions de vos options:

import com.beust.jcommander.Parameter; 

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; 
} 

puis vous demandez simplement JCommander à analyser:

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

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

Voici comment Cederic l'a présenté: http://beust.com/weblog/2010/07/13/announcing-jcommander-1-0/ – Jan

+0

Impossible de trouver une API pour imprimer l'aide. Voir la question connexe: http://stackoverflow.com/questions/30046171/how-to-print-help-using-jcommander –

+0

JCommander est maintenant ici http://jcommander.org/ – xamde

6
+0

J'apprécie ces liens vers des cadres alternatifs et je dois admettre que je n'ai pas remarqué cette question très similaire.Cependant, j'espérais atteindre quelqu'un qui * essayait * différentes alternatives et qui pouvait * recommander * l'une d'entre elles. – Jan

+0

Dans le respect, c'est le genre d'article que je cherchais: http://furiouspurpose.blogspot.com/2008/07/command-line-parsing-libraries-for-java.html Merci! – Jan

2

à java-source.net vous pouvez trouver au moins 4 autres bibliothèques alternatives à Apache Commons CLI.

0

getopt-1.0.11 est un simple facile à utiliser la bibliothèque légère je une fois pour arguements de ligne de commande d'analyse syntaxique

4

J'utilise personnellement https://github.com/kohsuke/args4j le args4J de kohsuke à

+0

C'est aussi ma préférence personnelle. args4j est plus flexible que JCommander. Les principes sont les mêmes, mais il est plus intuitif d'utiliser et de différencier les arguments et les options. –

0

Vous pouvez essayer commandline (joli nom anonyme, je sais)

Il utilise des annotations à la carte des arguments de ligne de commande dans un modèle d'objet. Deux modes d'analyse syntaxique et un ensemble d'annotations pouvant être combinées de diverses manières vous permettent de créer des règles d'options de ligne de commande assez avancées.

Bien qu'il vous permette de mapper les arguments de ligne de commande directement sur votre modèle de domaine, vous devez envisager d'utiliser des classes séparées pour les arguments de ligne de commande.