【问题标题】:Excluding few options in HelpFormatter.printHelp() using apache-commons-cli使用 apache-commons-cli 排除 HelpFormatter.printHelp() 中的几个选项
【发布时间】:2016-03-11 08:36:22
【问题描述】:

我正在使用 apache-commons-cli 来解析我的 java 程序中的命令行参数。

现在,我正在尝试寻找一种方法来排除在使用帮助中显示一些敏感调试选项。顺便说一句,我正在使用HelpFormatter 寻求帮助。

Option first = Option.builder("f").hasArg().desc("First argument").build();
Option second = Option.builder("s").hasArg().desc("Second argument").build();
Option debug = Option.builder("d").hasArg().desc("Debug argument. Shouldn't be displayed in help").build();

commandOptions.addOption(first).addOption(second).addOption(debug);

HelpFormatter help = new HelpFormatter();
help.printHelp("Test App", commandOptions);

这是打印所有选项。但我不想打印第三个选项。

实际输出:

usage: Test App
 -d <arg>   Debug argument. Shouldn't be displayed in help // This shouldn't be displayed.
 -f <arg>   First argument
 -s <arg>   Second argument

预期输出:

usage: Test App
 -f <arg>   First argument
 -s <arg>   Second argument

这样,调试参数只有真正需要了解它以进行调试的人才能知道。

有没有办法从单独的帮助输出中禁用特定选项。但仍然像其他选项一样解析它?

顺便说一句,我正在使用commons-cli-1.3.1.jar

【问题讨论】:

    标签: java apache-commons-cli


    【解决方案1】:

    据我所知,HelpFormatter 不打算被子类化,尤其是appendOption() 是私有的,因此不允许过滤掉选项。

    因此,我将简单地构建两个 Options 对象,一个用于实际解析命令行选项,一个用于打印帮助,即

    Option first = Option.builder("f").hasArg().desc("First argument").build();
    Option second = Option.builder("s").hasArg().desc("Second argument").build();
    Option debug = Option.builder("d").hasArg().desc("Debug argument. Shouldn't be displayed in help").build();
    
    commandOptions.addOption(first).addOption(second).addOption(debug);
    
    helpOptions.addOption(first).addOption(second);
    HelpFormatter help = new HelpFormatter();
    help.printHelp("Test App", helpOptions);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-05
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 2013-11-10
      • 2013-06-15
      • 1970-01-01
      相关资源
      最近更新 更多