Apache Commons CLI - тип опции и значение по умолчанию - PullRequest
36 голосов
/ 07 апреля 2011

Как я могу дать варианту CLI тип - такой как int или Integer?(Позже, как я могу получить проанализированное значение с помощью одного вызова функции?)

Как я могу присвоить опции CLI значение по умолчанию?Так что CommandLine.getOptionValue() или вызов функции, упомянутый выше, возвращает это значение, если только оно не указано в командной строке?

Ответы [ 4 ]

46 голосов
/ 11 мая 2011

EDIT: теперь поддерживаются значения по умолчанию. См. Ответ https://stackoverflow.com/a/14309108/1082541 ниже.

Как уже упоминал Брент Уорден, значения по умолчанию не поддерживаются.

У меня тоже были проблемы с использованием Option.setType. Я всегда получал исключение нулевого указателя при вызове getParsedOptionValue для опции с типом Integer.class. Поскольку документация не была действительно полезной, я изучил исходный код.

Глядя на класс TypeHandler и класс PatternOptionBuilder , вы видите, что Number.class должен использоваться для int или Integer.

А вот простой пример:

CommandLineParser cmdLineParser = new PosixParser();

Options options = new Options();
options.addOption(OptionBuilder.withLongOpt("integer-option")
                      .withDescription("description")
                      .withType(Number.class)
                      .hasArg()
                      .withArgName("argname")
                      .create());

try {
    CommandLine cmdLine = cmdLineParser.parse(options, args);

    int value = 0; // initialize to some meaningful default value
    if (cmdLine.hasOption("integer-option")) {
        value = ((Number)cmdLine.getParsedOptionValue("integer-option")).intValue();
    }

    System.out.println(value);
} catch (ParseException e) {
    e.printStackTrace();
}

Имейте в виду, что value может переполниться, если указан номер, который не вписывается в int.

27 голосов
/ 14 января 2013

Я не знаю, если он не работает или был добавлен недавно, но getOptionValue () имеет перегруженную версию, которая принимает значение по умолчанию (String)

1 голос
/ 18 октября 2017

OptionBuilder устарел в версиях 1.3 и 1.4, и Option.Builder, похоже, не имеет прямой функции для установки типа.Для класса Option существует функция setType.Вы можете получить преобразованное значение с помощью функции CommandLine.getParsedOptionValue.Не уверен, почему это не часть строителя больше.Теперь требуется некоторый код, подобный этому:

    options = new Options();

    Option minOpt = Option.builder("min").hasArg().build();
    minOpt.setType(Number.class);
    options.addOption(minOpt);

и чтение его:

    String testInput = "-min 14";
    String[] splitInput = testInput.split("\\s+");

    CommandLine cmd =  CLparser.parse(options, splitInput);
    System.out.println(cmd.getParsedOptionValue("min")); 

, что даст переменную типа Long

1 голос
/ 08 апреля 2011

CLI не поддерживает значения по умолчанию. Любая неустановленная опция приводит к getOptionValue возвращению null.

Вы можете указать типы параметров с помощью метода Option.setType и извлечь проанализированное значение параметра как этот тип, используя CommandLine.getParsedOptionValue

...