Apache Commons CLI 选项解析器可以忽略未知的命令行选项吗? [英] Can Apache Commons CLI options parser ignore unknown command-line options?
问题描述
我正在编写一个 Java 应用程序,它接受命令行参数,这些参数是使用 Apache Commons CLI 和 GnuParser 处理的.出于一些不太有趣的原因,我希望它默默地忽略未知的命令行选项,而不是抛出 ParseException,但我没有看到这样做的方法.我看到 GnuParser.parse() 上有一个 stopAtNonOption 布尔选项,但我想要的更像是 ignoreAtNonOption,它会在遇到未知标记后继续处理选项.
I am writing a Java application that takes command line arguments which are processed using Apache Commons CLI with the GnuParser. For reasons that are not interesting to get into, I would like it to silently ignore unknown command line options instead of throwing a ParseException but I don't see a way to do that. I see that there is a stopAtNonOption boolean option on GnuParser.parse() but what I want is more like ignoreAtNonOption where it will keep processing options after encountering an unknown token.
我可以实现我自己的解析器来完成这个,但我很惊讶没有内置这个功能,所以我想我会在走这条路之前检查一下.
I could implement my own parser to accomplish this but I'm surprised there isn't this functionality built in so I thought I'd check before going down that road.
我正在谈论的示例代码:
Example code for what I'm talking about:
try {
CommandLine commandLine = parser.parse(options, args);
// stopAtNonOption set to true (below) is also not what I want
// CommandLine commandLine = parser.parse(options, args, true);
} catch (ParseException e) {
LOG.error("error parsing arguments", e);
throw new RuntimeException(e);
}
推荐答案
这对我有用(其他解析器也可以派生):
This works for me (other parsers can be derived, too):
public class ExtendedGnuParser extends GnuParser {
private boolean ignoreUnrecognizedOption;
public ExtendedGnuParser(final boolean ignoreUnrecognizedOption) {
this.ignoreUnrecognizedOption = ignoreUnrecognizedOption;
}
@Override
protected void processOption(final String arg, final ListIterator iter) throws ParseException {
boolean hasOption = getOptions().hasOption(arg);
if (hasOption || !ignoreUnrecognizedOption) {
super.processOption(arg, iter);
}
}
}
这篇关于Apache Commons CLI 选项解析器可以忽略未知的命令行选项吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!