Java 如何确保在Apache Commons CLI中提供所有参数?

Java 如何确保在Apache Commons CLI中提供所有参数?,java,apache-commons,error-checking,apache-commons-cli,Java,Apache Commons,Error Checking,Apache Commons Cli,我看不到一种标准的方法来检查是否所有选项都在字符串[]输入中提供给 apache的CLI库。也就是说,我的选项都在命令行中重新指定,否则,我希望抛出一个异常 我正在尝试以下解决方法,但是在if语句中得到一个null指针异常 PosixParser p = new PosixParser(); CommandLine cli=p.parse(options,args); for(Object o : options.getOptions()) {

我看不到一种标准的方法来检查是否所有选项都在字符串[]输入中提供给 apache的CLI库。也就是说,我的选项都在命令行中重新指定,否则,我希望抛出一个异常

我正在尝试以下解决方法,但是在if语句中得到一个null指针异常

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()方法似乎提供了参数的短名称。

但是,如果我用opt.getLongName()替换op.getName()。。。它起作用了

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

1) 为什么选项的名称为空,而长名称为非空?
2) 是否有一种方法可以简单地确保所有选项都由字符串[]提供?例如,我想打电话:

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

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

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

(我不认为有一种简单的方法可以在一个步骤中生成所需的所有选项)

刚刚注意到:为了通过短名称获取选项,您可以调用getOpt(),而不是getArgName()或任何其他方法。hmmm。。。那太糟糕了。看起来这个api需要恢复。您确实需要根据需要标记选项。如果缺少某些选项,则会出现一个异常,其中包含缺少的选项列表。确实,这是一个冗长难看的过程,但我发现使用
makeRequiredOption
等方法创建工厂类可以极大地提高主类的可读性。
OptionBuilder
现在已被弃用。改用
Option.builder(“文件”)