我正在使用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?
答案 0 :(得分:0)
您可以从版本4.2.5中的依赖项添加对所需httpclient版本和exclude the httpclient transient dependency的依赖关系。使用mvn dependency:tree
确定添加排除的位置。