Подтвердить что ты не робот

Apache Commons CLI - тип опции и значение по умолчанию

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

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

4b9b3361

Ответ 1

EDIT: значения по умолчанию теперь поддерживаются. См. Ответ fooobar.com/questions/158738/... ниже.

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

У меня были проблемы с использованием 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.

Ответ 2

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

Ответ 3

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

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

Ответ 4

Опция 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