5

В Apache Commons CLI lib, можно ли обойти использование короткого имени, заставляя пользователя использовать длинное имя?Apache Commons CLI: как предотвратить использование коротких имен для параметров?

обычно, параметры определяются следующим образом:

new Option("u", "username", true, "automatic user name") 

Я хотел бы запретить использование «и». Но если я заменил его на или пустую строку, есть Исключения ...

Почему это требование? Я хотел бы, чтобы все мои параметры были только в форме --optionName = optionValue, потому что некоторые части моего приложения Spring Spring и Spring Boot распознают по умолчанию параметры в этом формате.

Кроме того, для обеспечения согласованности среди разработчиков и пользователей и упростить документацию, я считаю, что лучше, если у нас есть уникальный способ использовать опцию вместо 2.

ответ

5

Passing в null, как короткое имя работает для меня, когда используя последнюю версию Apache Commons Cli 1.3.1 и DefaultParser (который является единственным не осуждается сейчас):

Options options = new Options(); 

    Option option = new Option(null, "help", true, "some desc"); 

    options.addOption(option); 

    CommandLineParser parser = new DefaultParser(); 
    CommandLine cmd = parser.parse(options, new String[] {"--help=foobar"}); 

    // automatically generate the help statement 
    HelpFormatter formatter = new HelpFormatter(); 
    formatter.printHelp("ant", options); 

    assertEquals(cmd.hasOption("help"), true); 
    String optionValue = cmd.getOptionValue("help"); 
    assertEquals("foobar", optionValue); 
+0

Спасибо за ответ, но я @centric может быть тупой, я не понимаю, как запросите объект 'cmd' в случае null short-arg. Кажется, что все методы в классе CommandLine требуют, чтобы в качестве параметра передавалось краткое имя ... Можете ли вы мне помочь? Благодаря ! –

+0

В моем коде используется 'cmd.hasOption (" help ")', чтобы проверить, был ли задан '--help', работает ли это и для вас? – centic

+0

да, ваш код работает хорошо, и я благодарю вас за это. На самом деле я хочу получить значение опции. Например, давайте представим, что помощь может получить значение, если объявить так: new Option (null, «help», false, «some desc»); Тогда как мне получить доступ к значению, указанному в командной строке, для «помощи»? Я упал, как и весь метод API, нужно использовать short-arg для запроса значения ... –