首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache NoSuchMethod错误

Apache NoSuchMethod错误
EN

Stack Overflow用户
提问于 2018-07-26 12:43:11
回答 2查看 3.3K关注 0票数 10

当我试图创建一个Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Options.hasShortOption(Ljava/lang/String;)Z实例时,我得到了一个DefaultParser

我的代码:

代码语言:javascript
复制
    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);

堆栈跟踪:

代码语言:javascript
复制
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行是:

代码语言:javascript
复制
    CommandLine cmd = parser.parse(options, args);

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

是的,这个图书馆可以在罐子里找到。

试着多运行几个组合,但没有一个真正起作用。从好的方面来说,我有一个不同的错误。有点。

Stacktrace #2

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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版。

基本上,你有三个选择:

  1. 使用与commons-cli相同的avro-tools-1.8.2.jar版本。即commons-cli-1.2
  2. 确保您的commons-cli版本在avro-tools-1.8.2.jar之前的类路径上
  3. 重新考虑使用avro-tools的需要,如果它不是真正需要的话,就移除它。

如果您真的需要avro-tools,那么第一种选择可能是可行的。秒选项可能会首先修复这个问题,但可能会因为将要使用的avro-tools版本1.4的冲突而破坏commons-cli的功能。如果您真的不需要avro-tools (不是谈论avro,特别是tools jar ),我建议删除avro-tools依赖项。avro-tools似乎不适合作为依赖项被拉出来,但它更像是一个独立的应用程序。它捆绑了一堆外部库,这些库最终可能会导致您端的版本冲突。

票数 3
EN

Stack Overflow用户

发布于 2018-07-26 13:01:57

我使用1.4测试了您的代码,它运行良好

编辑:

代码语言:javascript
复制
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。

如果错误持续存在,复制并粘贴上面的代码,并检查它是否适合您。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51539130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档