使用 Apache Commons CLI 检测缺少命令行 arguments/options

Using Apache Commons CLI to detect absence of command line arguments/options

我目前正在使用库 Apache Commons CLI 1.3.1 来解析命令行参数并控制可执行 jar 中的执行流程。到目前为止,一切都非常简单,documentation and example usage 页面相对全面和有用。

但是,我仍然不清楚如何使用这个库来检测是否缺少任何参数或选项。我想检测这种情况,然后打印 usage/help 语句。我通过简单地检查参数数组的长度来解决这个问题,但我想知道库是否有一种方法来检测这种情况而不检查每个选项的存在。

这是我的代码,其中包含变通方法:

public static void main(String[] args)
{
    try
    {
       // create Options object
       Options options = new Options();

       // add t option
       options.addOption("t", false, "display current time");
       options.addOption("help", false, "print this message");

       CommandLineParser parser = new DefaultParser();
       CommandLine cmd = parser.parse(options, args);

       if(cmd.hasOption("t")) {
           log.debug("Received option t");
           // Do something
       }

       if (args.length <= 0 || cmd.hasOption("help"))
       {
           // automatically generate the help statement
           HelpFormatter formatter = new HelpFormatter();
           formatter.printHelp( "java -jar Client.jar <option> <arguments>", options);
       }
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
}

我认为您正在寻找 getArgList or the getArgs 方法。来自文档:

Retrieve any left-over non-recognized options and arguments

所以不是这个:

   if (args.length <= 0 || cmd.hasOption("help"))

这样使用:

   if (cmd.getArgs().length == 0 || cmd.hasOption("help"))

请注意 cmd.getArgs().length 不计算命令行上的开关 (-xxxx) - 只有不以破折号开头的参数