在我的maven项目中,我需要使用aws-java-sdk-athena,它将aws-java-sdk-core作为依赖项。然而,对于身份验证,我没有其他选择,但使用提供的工件,其中aws-android-sdk-core作为依赖项。问题是他们都有com.amazonaws.http.ExecutionContext类,具有完全相同的名称。但他们有不同的方法等。
我尝试排除其中一个,但随后其中一个关闭,这意味着使用了这些类。我现在非常沮丧,因为几乎不可能重新打包其中一个工件来更改其中的包名。
<dependencies>
<!-- This dependency requires aws-java-sdk-core 1.11.292 -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-athena</artifactId>
<version>1.11.292</version>
</dependency>
<!-- This dependency requires aws-android-sdk-core 2.6.16 -->
<dependency>
<groupId>work.commons</groupId>
<artifactId>work-commons-authentication</artifactId>
<version>${authz.version}</version>
</dependency>
<dependencies>
<repositories>
<repository>
<id>in.house</id>
<name>nexus</name>
<url>http://work.name.com/content/groups/public/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
在运行时,我遇到了这个例外:
org.springframework.web.util.NestedServletException:处理程序调度失败;嵌套异常是java.lang.NoSuchMethodError:com.amazonaws.http.ExecutionContext.setContextUserAgent(Ljava / lang / String;)
由于java-sdk和android-sdk都具有完全类 com.amazonaws.http.ExecutionContext ,但java-sdk中的类没有 setContextUserAgent 方法。如果我改变了依赖关系的顺序,Athena连接函数就会崩溃。
答案 0 :(得分:0)
使用Athena JDBC驱动程序的独立JAR文件解决了该问题。所有必需的类仍然有不同的包名称。所以我不需要安装整个aws-java-sdk-core。