java.lang.NoClassDefFoundError:带有AmazonHttpClient的org / apache / http / conn / SchemePortResolver

时间:2016-05-22 16:56:42

标签: java amazon-web-services

所有

当我将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>

任何人都知道我做错了什么?

感谢

4 个答案:

答案 0 :(得分:13)

我的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>

答案 1 :(得分:1)

如果你添加,

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

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

答案 2 :(得分:0)

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

Screenshot of Eclipse Dependency Hierarchy

答案 3 :(得分:0)

在我的情况下,我在Eclipse工作区中删除了.meta文件,然后再次导入该项目,之后它就像一个超级按钮一样工作。 无法确切知道问题出在哪里。 删除.meta之前,我先添加所有文件 aws-java-sdk-1.11.606 \ third-party \ lib