使用 apache-commons-cli 排除 HelpFormatter.printHelp() 中的一些选项

Cod*_*der 3 java apache-commons-cli

我正在使用 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);
Run Code Online (Sandbox Code Playgroud)

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

实际输出:

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
Run Code Online (Sandbox Code Playgroud)

预期输出:

usage: Test App
 -f <arg>   First argument
 -s <arg>   Second argument
Run Code Online (Sandbox Code Playgroud)

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

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

我正在commons-cli-1.3.1.jar顺便使用。

cen*_*tic 6

据我所知,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);
Run Code Online (Sandbox Code Playgroud)