在这种情况下,您必须定义两组选项并解析命令行两次。第一组选项包含所需组之前的选项(通常是--help
and --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.
}
}