Apache Commons CLI DefaultParser NoSuchMethod 错误
Apache Commons CLI DefaultParser NoSuchMethod error
我在尝试创建 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 中找到该库。
尝试了 运行 几种组合,其中 none 确实有效。从好的方面来说,我得到了一个不同的错误。有点。
堆栈跟踪 #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)
我使用 apache commons cli 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"));
}
}
我 运行 它具有以下参数:
--日期 123
和
-d 123
它打印出 123。
如果错误仍然存在,请复制并粘贴上面的代码并检查它是否适合您。
即 avro-tools-1.8.2.jar
自带的 commons-cli
版本与您要使用的版本冲突。
根据 avro-tools-1.8.2.jar
的 META-INF\DEPENDENCIES
文件,它似乎是 1.2 版本。
基本上你有三个选择:
- 使用与
avro-tools-1.8.2.jar
相同的 commons-cli
版本。 IE。 commons-cli-1.2
- 确保您的
commons-cli
版本在 avro-tools-1.8.2.jar
之前的类路径中
- 重新考虑使用
avro-tools
的需要,如果确实不需要,则删除依赖项。
如果您确实需要 avro-tools
,第一个选项可能是可行的方法。 seconds 选项可能会首先解决问题,但可能会破坏 avro-tools
的功能,因为将使用 commons-cli
的 1.4 版冲突。如果您真的不需要 avro-tools
(不是在谈论 avro
,而是在谈论 tools
jar),我建议您删除 avro-tools
依赖项。 avro-tools
似乎不适合作为依赖项被拉出,而是更像是一个独立的应用程序。它捆绑了一堆外部库,所有这些都可能最终导致您这边的版本冲突。
我在尝试创建 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 中找到该库。
尝试了 运行 几种组合,其中 none 确实有效。从好的方面来说,我得到了一个不同的错误。有点。
堆栈跟踪 #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)
我使用 apache commons cli 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"));
}
}
我 运行 它具有以下参数: --日期 123 和 -d 123
它打印出 123。
如果错误仍然存在,请复制并粘贴上面的代码并检查它是否适合您。
即 avro-tools-1.8.2.jar
自带的 commons-cli
版本与您要使用的版本冲突。
根据 avro-tools-1.8.2.jar
的 META-INF\DEPENDENCIES
文件,它似乎是 1.2 版本。
基本上你有三个选择:
- 使用与
avro-tools-1.8.2.jar
相同的commons-cli
版本。 IE。commons-cli-1.2
- 确保您的
commons-cli
版本在avro-tools-1.8.2.jar
之前的类路径中
- 重新考虑使用
avro-tools
的需要,如果确实不需要,则删除依赖项。
如果您确实需要 avro-tools
,第一个选项可能是可行的方法。 seconds 选项可能会首先解决问题,但可能会破坏 avro-tools
的功能,因为将使用 commons-cli
的 1.4 版冲突。如果您真的不需要 avro-tools
(不是在谈论 avro
,而是在谈论 tools
jar),我建议您删除 avro-tools
依赖项。 avro-tools
似乎不适合作为依赖项被拉出,而是更像是一个独立的应用程序。它捆绑了一堆外部库,所有这些都可能最终导致您这边的版本冲突。