2010-07-22 2 views
23

Для синтаксического анализа командной строки в Java я обычно использую Apache Commons CLI. Может ли кто-нибудь рекомендовать альтернативные библиотеки?Разбор командной строки: альтернативы CLI Commons?

+7

Если вы хотите попросить альтернативу тому, что вы обычно используете, было бы полезно, если бы вы сказали, что вы ищете, что ваш обычный вариант не предоставляет. –

+1

Если честно, у меня не было особой недостающей функции. Правда, Apache Commons CLI «проверен и проверен», но он также довольно подробный. Мне просто интересно, кто-нибудь представил какие-либо новые идеи в этой области. В этой категории, я думаю, я собираюсь более подробно рассмотреть предложение JCommander ниже. – Jan

+6

Возможный дубликат [Есть ли хороший парсер аргументов командной строки для Java?] (Http://stackoverflow.com/questions/367706/is-there-a-good-command-line-argument-parser-for-java) –

ответ

21

JCommander звучит как очень простой и интересный подход к разбору аргументов командной строки с аннотациями (от создателя TestNG):

Вы аннотирования поля с описанием ваших вариантов:

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

, а затем вы просто спросите JCommander разобрать:

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

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

Вот как Cederic представил его: http://beust.com/weblog/2010/07/13/announcing-jcommander-1-0/ – Jan

+0

Не удалось найти API для печати справки. См. Соответствующий вопрос: http://stackoverflow.com/questions/30046171/how-to-print-help-using-jcommander –

+0

JCommander сейчас здесь http://jcommander.org/ – xamde

6

Помогает ли этот ответ? How to parse command line arguments in Java?

+0

Я ценю эти ссылки на альтернативные рамки, и я должен признать, что я не заметил этого очень похожего вопроса.Тем не менее, я надеялся связаться с кем-то, кто * попробовал * разные альтернативы и кто может * рекомендовать * один из них. – Jan

+0

В отношении, это вид статьи, которую я искал: http://furiouspurpose.blogspot.com/2008/07/command-line-parsing-libraries-for-java.html Спасибо! – Jan

2

В java-source.net вы можете найти по крайней мере 4 других альтернативных библиотек Apache Commons CLI.

0

Getopt-1.0.11 является простым простым в использовании легкой библиотеки я использовал один раз для командной строки заданы параметров разборе

4

Я лично использую args4J Kohsuke по адресу https://github.com/kohsuke/args4j

+0

Это также мои личные предпочтения. args4j более гибкий, чем JCommander. Принципы одинаковы, но более интуитивно понятно использовать и различать аргументы и опции. –

0

Вы можете попробовать commandline (довольно анонимное имя, я знаю)

Он использует аннотации к карте аргументы командной строки в объектной модели. Пара разбора режимов и набор аннотаций, которые могут быть объединены различными способами, позволяют создавать довольно продвинутые правила опций командной строки.

Хотя он позволяет сопоставлять аргументы командной строки непосредственно на вашей модели домена, , вам следует рассмотреть возможность использования отдельных классов для аргументов командной строки.