Вопрос по java – Commons CLI обязательные группы

27

Я пишу приложение командной строки на Java и выбрал Apache Commons CLI для анализа входных аргументов.

Скажем, у меня естьtwo required options (т.е. -вход и -выход). Я создаю новый объект Option и устанавливаю необходимый флаг. Пока все хорошо. Но у меня естьthird, not required optionт.е. -Помогите. С настройками, о которых я упоминал, когда пользователь хочет показать справку (используйте опцию -help), он говорит: -input и -output & quot; являются обязательными. Есть ли способ реализовать это (через Commons CLI API, не просто, если (! HasOption) генерирует новый XXXException ()).

Ваш Ответ

1   ответ
30

В этой ситуации вам нужно определить два набора параметров и дважды проанализировать командную строку. Первый набор параметров содержит параметры, которые предшествуют требуемой группе (обычно--help а также--version), а второй набор содержит все параметры.

Вы начинаете с анализа первого набора параметров, и если совпадений не найдено, вы переходите ко второму набору.

Вот пример:

Options options1 = new Options();
options1.add(OptionsBuilder.withLongOpt("help").create("h"));
options1.add(OptionsBuilder.withLongOpt("version").create());

// this parses the command line but doesn't throw an exception on unknown options
CommandLine cl = new DefaultParser().parse(options1, args, true);

if (!cl.getOptions().isEmpty()) {

    // print the help or the version there.

} else {
    OptionGroup group = new OptionGroup();
    group.add(OptionsBuilder.withLongOpt("input").hasArg().create("i"));
    group.add(OptionsBuilder.withLongOpt("output").hasArg().create("o"));
    group.setRequired(true);

    Options options2 = new Options();
    options2.addOptionGroup(group);

    // add more options there.

    try {
        cl = new DefaultParser().parse(options2, args);

        // do something useful here.

    } catch (ParseException e) {
        // print a meaningful error message here.
    }
}
Error: User Rate Limit Exceeded pavel
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededcommandline.getOptions()Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded pavel
Error: User Rate Limit Exceeded

Похожие вопросы