当我尝试创建 DefaultParser
实例时,我遇到了一个 Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Options.hasShortOption(Ljava/lang/String;)Z
的异常。
我的代码:
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包中找到。
尝试运行了几个组合,但它们都没有真正起作用。好处是我得到了一个不同的错误。有点不同。
堆栈跟踪#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)
mvn dependency:tree
开始 - 检查其输出并查找重复依赖项。 - rkosegiorg.apache.commons.cli.Options.class.getProtectionDomain().getCodeSource().getLocation().toURI()
和org.apache.commons.cli.DefaultParser.class.getProtectionDomain().getCodeSource().getLocation().toURI()
。它们都应该输出相同的文件,但可能不在你的设置中。你可以通过查看System.getProperty("java.class.path")
的输出来进一步调查你的类路径。如果你正在使用maven或gradle,mvn dependency:tree
或gradle dependencies
将为你提供更多的见解。 - dpr