【问题标题】:Jar dependency in eclipse - same class in 2 external jarsEclipse 中的 Jar 依赖项 - 2 个外部 jar 中的相同类
【发布时间】:2018-03-10 23:12:31
【问题描述】:

我有一个jar依赖问题,不知道如何解决。

类 HttpClientBuilder 在我引用的库中的两个外部 jar 中。但是在一次日食选择中,缺少一种方法。我想是因为这个 jars 里面有它所有的依赖库,而且这个 httpclient 已经过时了。

是否有可能告诉 Eclipse 应该为 HttpClientBuilder 类选择哪个外部 jar?

Exception in thread "Thread-0" java.lang.NoSuchMethodError: org.apache.http.impl.client.HttpClientBuilder.setSSLHostnameVerifier(Ljavax/net/ssl/HostnameVerifier;)Lorg/apache/http/impl/client/HttpClientBuilder;
    at org.telegram.telegrambots.bots.DefaultAbsSender.<init>(DefaultAbsSender.java:63)
    at org.telegram.telegrambots.bots.TelegramLongPollingBot.<init>(TelegramLongPollingBot.java:35)
    at org.telegram.telegrambots.bots.TelegramLongPollingBot.<init>(TelegramLongPollingBot.java:31)
    at minerbot.CommandHandler.<init>(CommandHandler.java:9)
    at minerbot.Main$CommandThread.run(Main.java:97)
    at java.lang.Thread.run(Unknown Source)

谢谢!!

【问题讨论】:

    标签: java eclipse jar dependencies


    【解决方案1】:

    如果您的项目没有使用 maven、ant 等软件项目管理和理解工具,那么您应该使用它,因为它通过排除项目不需要的依赖项来帮助管理依赖项。

    基本上,你可以排除你的项目不需要的依赖jar,这样你就不会得到不必要的传递依赖。

    如果您只想从某些 jar 中排除类,那么这是一种选择。

    Exclude classes from a dependency in Maven

    这里是排除不必要的依赖jar的例子(maven官网)...

    https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

    <project>
      ...
      <dependencies>
        <dependency>
          <groupId>sample.ProjectA</groupId>
          <artifactId>Project-A</artifactId>
          <version>1.0</version>
          <scope>compile</scope>
          <exclusions>
            <exclusion>  <!-- declare the exclusion here -->
              <groupId>sample.ProjectB</groupId>
              <artifactId>Project-B</artifactId>
            </exclusion>
          </exclusions> 
        </dependency>
      </dependencies>
    </project>
    

    Maven Eclipse 插件安装:

    确认 Eclipse 设置:

    • 打开窗口 - 首选项
    • 检查左侧面板中是否列出了 Maven 并检查安装中的设置
    • 点击已有项目,右键选择配置->转换为Maven项目

    【讨论】:

    • 好的,我安装了 maven,但不明白如何使用它。如果我想从中排除“org.apache.http.impl.client”,我需要将哪些值添加到 pom.xml外部 jar “telegrambots-3.3-jar-with-dependencies.jar”
    • 您是否需要 telegrambots-3.3-jar-with-dependencies.jar 中的任何其他类,如果它是传递依赖项,那么您可以将其完全排除在被拉取形式的依赖项之外。如果您需要该 jar 中的其他类,请尝试将此 jar 放在您需要使用该类的其他 jar 下方。
    • 是的,我需要所有其他课程。只有这个 org.apache.http.impl.client 。我添加了 org.apache.httpcomponentshttpclient4.5.3com .github.pengradjava-telegram-bot-api3.3.0 所以它应该适合......现在日食说它没有找到课程。我已经在 Eclipse 中选择了“更新项目”,但它没有帮助...
    • 如果eclipse找不到类,说明maven repo设置不正确。检查 Eclipse 中的 Maven 设置,并确保 Maven 存储库在文件夹(包名)中有 jar。
    猜你喜欢
    • 2011-08-26
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多