【问题标题】:java.lang.NoClassDefFoundError: org/apache/http/conn/SchemePortResolver with AmazonHttpClientjava.lang.NoClassDefFoundError: org/apache/http/conn/SchemePortResolver 与 AmazonHttpClient
【发布时间】:2019-08-13 14:56:56
【问题描述】:

全部

当我将 aws 库更新到最新的 1.11.3 时,我在项目中遇到了这个错误。

原因:

java.lang.NoClassDefFoundError: org/apache/http/conn/SchemePortResolver
at com.amazonaws.http.apache.client.impl.ApacheHttpClientFactory.<init>(ApacheHttpClientFactory.java:40)
at com.amazonaws.http.AmazonHttpClient.<clinit>(AmazonHttpClient.java:97)
at com.amazonaws.AmazonWebServiceClient.<init>(AmazonWebServiceClient.java:145)
at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:393)
at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:373)
at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:355)
at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:339)

在我的 pom.xml 中

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-core</artifactId>
        <version>1.11.3</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-s3</artifactId>
        <version>1.11.3</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-kms</artifactId>
        <version>1.11.3</version>
    </dependency>
    <dependency>
         <groupId>org.bouncycastle</groupId>
          <artifactId>bcprov-ext-jdk15on</artifactId>
         <version>1.54</version>
    </dependency>
    <dependency>
         <groupId>com.amazonaws</groupId>
         <artifactId>aws-encryption-sdk-java</artifactId>
          <version>0.0.1-SNAPSHOT</version>
    </dependency>

谁知道我做错了什么?

谢谢

【问题讨论】:

    标签: java amazon-web-services


    【解决方案1】:

    我的 grails 应用程序也有类似的问题。在我的情况下,ClassNotFoundException 是从部署脚本中抛出的。对我来说 SchemePortResolver 没有被隐式解析的原因是因为它在编译时不需要,在运行时需要它。这是我添加到我的 BuildConfig.groovy 来修复它的内容:

    runtime 'org.apache.httpcomponents:httpclient:4.5.2' //Required by BeanstalkDeploy.groovy at runtime
    

    由于 OP 的问题是针对 Maven 的,因此以下是等效的包括:

     <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpclient</artifactId>
       <version>4.5.2</version>
       <scope>runtime</scope>
     </dependency>
    

    【讨论】:

      【解决方案2】:

      如果你添加,

      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.2</version>
       </dependency>
      

      ,它应该可以正常工作,因为它包含缺少的类定义。

      【讨论】:

      • 欢迎来到 StackOverflow。除了包含有效的代码外,请包含一些说明为什么有效的文本。
      • 这里尝试将我的 sdk 升级到 spark-redshift 包的 1.11.15 时出现同样的错误,但也出现同样的错误。将 httpclient dep 添加到 pom 并没有帮助。这还有什么好运气吗?
      【解决方案3】:

      一个常见的原因是 Maven 依赖冲突。在下面的示例中(在 Eclipse 的 Dependency Hierarchy 选项卡中查看pom.xml),POM 明确包含 httpclient 的 v4.1,这会强制 Maven 省略 v4.5.5 的 aws-java- sdk-core 需要(因此会导致类似的错误 java.lang.NoClassDefFoundError: org/apache/http/conn/DnsResolver at com.amazonaws.http.apache.client.impl.ApacheHttpClientFactory...):

      【讨论】:

      • 从命令行你可以使用mvn dependency:tree -Dverbose来获取类似的信息。
      • 我该如何解决?
      • 这取决于您的具体情况。如果冲突是因为您自己的代码中的依赖关系,您可以升级该依赖关系 - 这可能需要也可能不需要更改您的代码。如果冲突是由于您的代码所依赖的某个其他库引入的依赖关系,那么您可以在 POM 中的 &lt;dependency&gt; 中为旧的 httpclient 版本使用 &lt;exclusion&gt; - 但代码有可能依赖于旧版本的将不再正常运行。
      【解决方案4】:

      在我的情况下,我删除了 Eclipse 工作场所中的 .meta 文件,然后再次导入项目,之后它就像一个魅力一样工作。 无法确切知道问题出在哪里。 在删除 .meta 之前,我添加了所有文件 aws-java-sdk-1.11.606\第三方\lib

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-06
        • 2017-03-16
        • 2015-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-05
        • 1970-01-01
        相关资源
        最近更新 更多