Как обеспечить предоставление всех аргументов в CLI Apache Commons? - PullRequest
7 голосов
/ 22 декабря 2011

Я не вижу стандартного способа проверки, все ли опции предоставлены во входных данных String [] для CLI-библиотека apache. То есть - все мои параметры REUIRED в командной строке, в противном случае, я хочу, чтобы исключение выдать.

Я пробую следующее как обходной путь, но получаю исключение Nullpointer в операторе if ...

PosixParser p = new PosixParser();
        CommandLine cli=p.parse(options,args);
        for(Object o : options.getOptions())
        {
            Option op = (Option)o;
            if(cli.getOptionValue(op.getName()))
            throw new ParseException("Missing argument ! " + op.getArgName() + ":"+op.getDescription());
    }

ОБНОВЛЕНИЕ ЭТОГО: похоже, что метод getOpt () предоставляет короткое имя аргумента.

Однако, если я заменю op.getName () на opt.getLongName () ... это работает!

В любом случае .. У меня есть 2 вопроса:

1) Почему опция имеет нулевое имя, но ненулевое longName?
2) Есть ли способ просто убедиться, что во всех опциях указана строка []? Например, я хотел бы позвонить:

  if(! options.isAllProvided())
     throw new ParseException("You are missing some options ! " + StringUtils.join(userInputArray,','));

1 Ответ

9 голосов
/ 22 декабря 2011

Вот как вы можете установить требуемый параметр:

Option logfile = OptionBuilder.withArgName( "file" )
            .isRequired() // make it required
            .hasArg()
            .withDescription(  "use given file for log" )
            .create( "logfile" );

(я не думаю, что есть простой способ сделать все необходимые параметры за один шаг)

...