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

标签 java apache-commons apache-commons-cli

我正在编写一个 Java 应用程序,它接受命令行参数,这些参数使用 Apache Commons CLI 和 GnuParser 进行处理。由于不感兴趣的原因,我希望它默默地忽略未知的命令行选项,而不是抛出 ParseException 但我看不到这样做的方法。我看到 GnuParser.parse() 上有一个 stopAtNonOption boolean 选项,但我想要的更像是 ignoreAtNonOption ,它会在遇到未知 token 后继续处理选项。

我可以实现自己的解析器来完成此任务,但我很惊讶没有内置此功能,所以我想在走这条路之前先检查一下。

我正在谈论的示例代码:

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);
}

最佳答案

这对我有用(也可以派生其他解析器):

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);
        }
    }

}

关于java - Apache Commons CLI 选项解析器可以忽略未知的命令行选项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6049470/

相关文章:

java - 为什么我无法在 Apache Commons 中将 Transformer 设置为 LazyList?

java - 我如何 'get' 帮助字符串来自 commons cli 而不是 'print'

java - 与 sql 数据库对话的多线程应用程序的最佳实践

apache-commons - 组合配置文件

java - apache ant - 没有指定源文件和包

java - 通用公共(public)集合

java - 如何使用 Apache Commons CLI 库来处理 "complex"参数?

java - Commons CLI 不支持我的命令行设置

java - 具有数据库数据内存副本的框架/应用程序

java - 如何从另一个类访问 hashmap 值?