当我试图创建一个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。
是的,这个图书馆可以在罐子里找到。
试着多运行几个组合,但没有一个真正起作用。从好的方面来说,我有一个不同的错误。有点。
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)发布于 2018-08-06 12:54:11
也就是说,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版本。即commons-cli-1.2commons-cli版本在avro-tools-1.8.2.jar之前的类路径上avro-tools的需要,如果它不是真正需要的话,就移除它。如果您真的需要avro-tools,那么第一种选择可能是可行的。秒选项可能会首先修复这个问题,但可能会因为将要使用的avro-tools版本1.4的冲突而破坏commons-cli的功能。如果您真的不需要avro-tools (不是谈论avro,特别是tools jar ),我建议删除avro-tools依赖项。avro-tools似乎不适合作为依赖项被拉出来,但它更像是一个独立的应用程序。它捆绑了一堆外部库,这些库最终可能会导致您端的版本冲突。
发布于 2018-07-26 13:01:57
我使用1.4测试了您的代码,它运行良好
编辑:
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.DefaultParser;
public class Main {
public static void main(String[] args) throws ParseException {
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);
System.out.println(cmd.getParsedOptionValue("day"));
}
}我使用以下args运行它:-date 123和-d 123
印的是123。
如果错误持续存在,复制并粘贴上面的代码,并检查它是否适合您。
https://stackoverflow.com/questions/51539130
复制相似问题