使用AWS Java SDK和Hadoop将项目放入DynamoDB时出错

时间:2016-02-02 23:00:15

标签: java maven hadoop amazon-web-services amazon-dynamodb

我正在使用hadoop 2.7,hadoop-core版本1.1.2和AWS Java SDK 1.10.50。

当我尝试在dynamoDB上放置一个项目时,我收到以下错误:

java.lang.NoSuchFieldError: INSTANCE
at com.amazonaws.http.conn.SdkConnectionKeepAliveStrategy.getKeepAliveDuration(SdkConnectionKeepAliveStrategy.java:48)

我发现此错误是由于AWS SDK和HttpCore版本的冲突造成的。

在我的代码中运行:

ClassLoader classLoader = MyClass.class.getClassLoader();
URL resource = classLoader.getResource("org/apache/http/message/BasicLineFormatter.class";
System.out.println(resource);

输出结果为:

jar:file:/usr/local/Cellar/hadoop/2.7.0/libexec/share/hadoop/common/lib/httpcore-4.2.5.jar!/org/apache/http/message/BasicLineFormatter.class

表示它仍在使用冲突的版本。

但是在我的pom.xml上,我添加了:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.4.1</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.1</version>
    <scope>compile</scope>
</dependency>

尝试使用SDK强制使用兼容版本,但我的代码仍使用冲突版本。

任何人都知道如何强制我的应用程序使用非冲突版本的HttpCore和HttpClient?

1 个答案:

答案 0 :(得分:0)

您可以从版本4.2.5中的依赖项添加对所需httpclient版本和exclude the httpclient transient dependency的依赖关系。使用mvn dependency:tree确定添加排除的位置。