7

我没有看到检查是否所有选项都在 apache 的 CLI 库的 String[] 输入中提供的标准方法。也就是说 - 我的选项都在命令行中被 REUIRED,否则,我想抛出一个异常。

我尝试以下作为解决方法,但在 if 语句中出现 Nullpointer 异常...

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()... 它可以工作!

无论如何..我有两个问题:

1)为什么一个选项会有一个空名称,但一个非空 longName ?
2)有没有办法简单地确保提供所有选项 String[] ?例如,我想打电话:

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

1 回答 1

10

以下是如何设置选项为必需的:

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

(我认为没有一种简单的方法可以一步完成所需的所有选项)

于 2011-12-21T22:27:53.527 回答