java - Athena JDBC 驱动程序版本 2.0.15 与核心 AWS SDK 不兼容?
问题描述
我们将标准 Java AWS 开发工具包用于其他 AWS 服务,BasicAWSCredentials
用于身份验证。对于 Athena 集成,我们使用标准AWS Athena JDBC 驱动程序。这一直工作正常,但是当升级到最新的 Athena JDBC 驱动程序版本(2.0.15)时,应用程序中BasicAWSCredentials
其他地方的使用停止工作
我们得到的错误信息是:
class "com.amazonaws.auth.BasicAWSCredentials"'s signer information does not match signer information of other classes in the same package
据我所知,此错误消息是由同一包中的不同类从未以相同方式签名的不同 jar 加载的。确实:来自 maven 的核心 SDK jar 没有签名,但 2.0.15 Athena JDBC 驱动程序 jar(由于某些模糊的原因 - 包括例如com.amazonaws.auth.AWSCredentials
和com.amazonaws.auth.AWSCredentialsProvider
)由“Amazon.com Services LLC”签名。
这意味着 JVM 可能(可能取决于类路径排序)尝试com.amazonaws.auth.AWSCredentials
从 JDBC 驱动程序 jar 加载,但com.amazonaws.auth.BasicAWSCredentials
该类是在 aws-java-sdk-core jar 中定义的,即 JVM被告知在来自不同签名的 jar 的相同包。
底线:在 JDBC 驱动程序 jar 中包含类似乎是一个坏主意com.amazonaws.auth
,特别是因为这个 jar 是在最新版本中签名的。JVM(JDK 11)将不接受从此包加载不同的类,除非所有 jar 都以相同的方式签名。
想法/解决方法?我宁愿不篡改任何外部罐子。
解决方案
推荐阅读
- android - Flutter:我应该如何添加古吉拉特语支持?
- java - 通过外部文件扩展 Tomcat 管理器应用访问
- python - 无法使用 Argparse
- android - 如何在 Firebase Firestore 中查询
- php - 使用 Ajax 将数组发送到后端嵌套了太多数组
- javascript - (ipcMain Eletronjs) 事件未定义
- php - 使服务器应用程序仅接受来自同一主机中客户端应用程序的请求
- javascript - 滚动显示,但不能在固定菜单内的绝对 div 内的 div 中工作
- vba - VBA WORD:查找具有特定样式的段落
- c++ - 在 C++ 中,集合的迭代器可以用来查找集合的两个连续元素之间的差异吗?