我在尝试创建Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Options.hasShortOption(Ljava/lang/String;)Z实例时收到DefaultParser

我的代码:

    Options options = new Options();
    // option for day offset
    options.addOption(new Option("d", "day", true, "Day offset. -d 7 will
    request for last weeks data"));
    //options.addOption("d", "day", true, "Day offset. -d 7 will request for last weeks data");

    CommandLineParser parser = new DefaultParser();
    CommandLine cmd = parser.parse(options, args);

堆栈跟踪:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Options.hasShortOption(Ljava/lang/String;)Z
    at org.apache.commons.cli.DefaultParser.handleShortAndLongOption(DefaultParser.java:491)
    at org.apache.commons.cli.DefaultParser.handleToken(DefaultParser.java:243)
    at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:120)
    at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:76)
    at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:60)
    at domain.Main.main(Main.java:60)

60行是这样的:
    CommandLine cmd = parser.parse(options, args);

我只是在遵循官方的Apache文档-https://commons.apache.org/proper/commons-cli/usage.html

是的,可以在 jar 中找到该库。

尝试运行更多组合,但没有一个真正起作用。从好的方面来说,我遇到了另一个错误。有点儿。

Stacktrace#2
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Options.getMatchingOptions(Ljava/lang/String;)Ljava/util/List;
    at org.apache.commons.cli.DefaultParser.handleLongOptionWithoutEqual(DefaultParser.java:404)
    at org.apache.commons.cli.DefaultParser.handleLongOption(DefaultParser.java:384)
    at org.apache.commons.cli.DefaultParser.handleToken(DefaultParser.java:239)
    at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:120)
    at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:76)
    at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:60)
    at domain.Main.main(Main.java:61)

最佳答案

那就是avro-tools-1.8.2.jar带来了它自己的commons-cli版本,该版本与您要使用的版本冲突。

根据META-INF\DEPENDENCIESavro-tools-1.8.2.jar文件,它似乎是1.2版。

基本上,您有三个选择:

  • 使用commons-cli使用的相同版本的avro-tools-1.8.2.jar。 IE。 commons-cli-1.2
  • 确保commons-cli的版本在avro-tools-1.8.2.jar之前的类路径上
  • 重新考虑使用avro-tools的需要,如果不是真的需要,请删除依赖项。

  • 如果您确实需要avro-tools,则第一个选择可能是解决方法。 seconds选项可能会首先解决此问题,但由于将使用avro-tools 1.4版本冲突,因此可能会破坏commons-cli的功能。如果您真的不需要avro-tools(不是在谈论avro,而是专门在tools jar上),建议您删除avro-tools依赖项。 avro-tools似乎不适合作为依赖项来获取,但它更是一个独立的应用程序。它捆绑了一堆外部库,这些库可能最终都会导致您方面的版本冲突。

    关于java - Apache Commons CLI DefaultParser NoSuchMethod错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51539130/

    10-12 19:05