使用Apache Commons CLI检测缺少命令行参数/选项

时间:2016-11-14 18:56:43

标签: java apache-commons-cli

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

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

这是我的代码,其中包含左侧的解决方法:

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();
    }
}

2 个答案:

答案 0 :(得分:2)

我认为您正在寻找getArgListgetArgs方法。来自文档:

  

检索任何遗留的未识别选项和参数

所以不要这样:

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

像这样使用:

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

答案 1 :(得分:2)

请注意,cmd.getArgs()。length不计算命令行中的开关(-xxxx) - 只有args不以dash开头