现象
表格存储的Java SDK依赖了2.4.1版本的Protobuf库以及4.0.2版本的httpasyncclient,容易与您的应用程序中自带的相同库冲突。
解决方案
您可以使用表格存储SDK提供的一个特殊版本:
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>ots-public</artifactId>
<version>2.2.5</version>
<classifier>jar-with-dependencies</classifier>
<exclusions>
<exclusion>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</exclusion>
</exclusions>
</dependency>
或者
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>tablestore</artifactId>
<version>4.2.3</version>
<classifier>jar-with-dependencies</classifier>
<exclusions>
<exclusion>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</exclusion>
</exclusions>
</dependency>
[backcolor=transparent]说明:classifier为jar-with-dependencies,它将依赖的HttpClient和Protobuf这两个库都通过rename package的方式打包进去,去除了对HttpClient和Protobuf的依赖。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
当您遇到表格存储Java SDK与项目中已存在的Protobuf库及httpasyncclient库版本冲突的问题时,可以采取以下专业解决方案来避免此类冲突:
选择特殊版本的SDK依赖:
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>ots-public</artifactId>
<version>2.2.5</version>
<classifier>jar-with-dependencies</classifier>
</dependency>
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>tablestore</artifactId>
<version>4.2.3</version>
<classifier>jar-with-dependencies</classifier>
</dependency>
这两个版本的SDK都通过jar-with-dependencies
分类器包含了必要的依赖,并且对HttpClient
和Protobuf
库进行了重命名打包,从而有效避免了与您项目中原有库的冲突。
配置Maven以排除冲突依赖: 在采用上述特殊版本SDK的同时,确保在您的pom.xml
文件中正确排除原有的冲突依赖项,例如:
<dependency>
<!-- 使用上述推荐版本之一 -->
...
<exclusions>
<exclusion>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpasyncclient</artifactId>
</exclusion>
</exclusions>
</dependency>
这样配置会排除掉可能引起冲突的直接依赖,确保仅使用SDK内部打包处理过的依赖版本。
验证依赖树: 在完成上述配置后,建议执行mvn dependency:tree
命令来检查项目的依赖树,确认是否已成功排除冲突库,并且新引入的SDK版本及其依赖是否符合预期。这一步骤有助于发现并修正任何潜在的依赖问题。
通过以上步骤,您可以有效地解决表格存储Java SDK与应用程序中其他相同库的版本冲突问题,确保程序运行时不会因库不兼容而出现异常。