一个二次封装组件依赖冲突问题的解决思路
组件二次封装的冲突问题的一个记录
具体的场景是新建一个项目,使用了一个全文检索的组件,这个组件二次封装了spring-data-elasticsearch的组件,但是这个组件在别的项目上可以正常使用,但是在新的项目上出问题了,如下所示:
解决这个问题走了一些弯路
一些弯路:
- 以为打包的时候修改了依赖的版本,导致版本不一致问题;
- 以为本地加了依赖,导致没有使用组件中确定的版本;
- 以为这个组件本身打包的时候编译出了问题;
解决问题的思路
思路:
1.查看依赖版本发现项目中组件的依赖树跟组件原有的依赖树版本是不同的:
2.查看是什么引用导致的组件依赖版本不一致,首先看spring-boot版本,都改成2.3.6.RELEASE,问题没有解决
3.从依赖树中发现kafka的引用中有一个spring-data-commons的依赖包,版本比较高一些,需要深入spring-kafka的pom文件才能发现
4.得出一个经验,如果两个组件都使用了相同的依赖,则比较老的依赖会自动升级成比较新的依赖,比如这个问题,spring-kafka和spring-data-elasticsearch都有相同的依赖spring-data-parent,spring-kafka则是通过spring-data-commons引用的,所以spring-data被升级了。
5.解决方案就是使用一个parent级别的pom进行版本管理,或者exclude调不合适的版本,重新引入正确的版本。我这边采用的是前者。不过大多数情况下第二次方式解决问题比较常见。