我在尝试创建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\DEPENDENCIES
的avro-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/