我正在使用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
。
答案 0 :(得分:3)
据我所知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);