java - 使用 apache-commons-cli 排除 HelpFormatter.printHelp() 中的几个选项

标签 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);

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

实际输出:

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顺便说一下。

最佳答案

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

因此我会简单地构建两个 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);

关于java - 使用 apache-commons-cli 排除 HelpFormatter.printHelp() 中的几个选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35935568/

相关文章:

java - 如何从 EditText 和按钮/初始化对象填充 ArrayList

java - 在计时器完成或取消后运行代码

java - Dojo Toolkit - 比较两个字符串

java - ClassNotFoundException : org. apache.commons.cli.ParseException 与 Maven

java - Commons CLI 中的 DefaultParser 的行为与已弃用的解析器不同

java - Apache Commons CLI 选项解析器可以忽略未知的命令行选项吗?

java - C语言访问手机中的下载文件夹

java - com.amazonaws.services.texttract 的 Maven 依赖项是什么?

java - Commons CLI 所需的组

java - 为什么默认解析器(使用 commons-cli)在选项无法识别时不会抛出异常?