使用aws java sdk和hadoop将项放入dynamodb时出错

gdrx4gfi  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(373)

我使用的是hadoop2.7、hadoopcoreversion1.1.2和awsjavasdk1.10.50。
当我尝试在dynamodb上放置一个项目时,会出现以下错误:

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

我发现这个错误是由于awssdk和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的非冲突版本吗?

bjp0bcyl

bjp0bcyl1#

您可以在所需的httpclient版本上添加依赖项,并从拉入版本4.2.5的依赖项中排除httpclient临时依赖项。使用 mvn dependency:tree 以确定在何处添加排除。

相关问题