我写在Java命令行应用程序,我已经选择了Apache的百科全书CLI来解析输入参数。
比方说,我有两个必需的选项 (即-输入-输出和)。 我创造新的选项对象,并根据需要设定标志。 现在这一切都很好。 但我第三,不是必需的选项 ,即。 -救命。 与我所提到的,当用户想要显示的帮助(使用-help选项),它说:“ - 输入 - 输出和”是必需的设置。 有什么办法来实现这个(通过共享CLI API,如果不是简单的(!hasOption)抛出新XXXException())。
我写在Java命令行应用程序,我已经选择了Apache的百科全书CLI来解析输入参数。
比方说,我有两个必需的选项 (即-输入-输出和)。 我创造新的选项对象,并根据需要设定标志。 现在这一切都很好。 但我第三,不是必需的选项 ,即。 -救命。 与我所提到的,当用户想要显示的帮助(使用-help选项),它说:“ - 输入 - 输出和”是必需的设置。 有什么办法来实现这个(通过共享CLI API,如果不是简单的(!hasOption)抛出新XXXException())。
在这种情况下,你必须定义两组的选项和解析命令行的两倍。 第一组选项包含先于所需的组(通常的选项--help
和--version
),和所述第二组中包含的所有选项。
您可以通过解析第一组选项开始,如果没有找到匹配的,你去与第二组。
下面是一个例子:
Options options1 = new Options();
options1.add(OptionsBuilder.withLongOpt("help").create("h"));
options1.add(OptionsBuilder.withLongOpt("version").create());
// this parses the command line but doesn't throw an exception on unknown options
CommandLine cl = new DefaultParser().parse(options1, args, true);
if (!cl.getOptions().isEmpty()) {
// print the help or the version there.
} else {
OptionGroup group = new OptionGroup();
group.add(OptionsBuilder.withLongOpt("input").hasArg().create("i"));
group.add(OptionsBuilder.withLongOpt("output").hasArg().create("o"));
group.setRequired(true);
Options options2 = new Options();
options2.addOptionGroup(group);
// add more options there.
try {
cl = new DefaultParser().parse(options2, args);
// do something useful here.
} catch (ParseException e) {
// print a meaningful error message here.
}
}