大多数公司的大多数项目都会遇到jar包冲突问题,几乎所有的jar包冲突都与依赖传递有关,那么我们先来看看maven中的依赖传递有哪些原则:
原则一:最短路径优先原则
假如你的项目引入了2个Jar包A和B,A和B都传递依赖了Z这个Jar包:
A -> X -> Y -> Z(2.5)
B -> X -> Z(2.0)
那么,项目中最终生效的是Z(2.0)这个版本,因为它的路径更短。如果此时我在项目中直接引用了Z(3.0)的包,那么生效的就是3.0的版本,这是一样的道理。
举例:
项目依赖的包版本:
1.7.5:有5个依赖层级
1.9.2:有4个依赖层级,路径更短
maven package后,查看实际使用的包版本:
原则二:最先声明优先原则
如果项目中两个版本的Jar包路径长度一样,优先选最先声明的那个。
A -> Z(3.0)
B -> Z(2.5)
这里项目中是先引入了A这个Jar包,所以传递过来的Z就会引入3.0这个版本。
举例:
项目依赖的包版本:
2.14.2:有4个层级
2.9.4:同样有4个层级,但2.14.2在2.9.4之前声明
maven package后,查看实际使用的包版本:
怎么看最终生效的是哪个版本呢?
可以在项目中执行package命令,命令完成后会在/target下面生成发布包,在发布包中找到lib文件夹,这个文件夹下面就是项目依赖的所有jar包了。
更多精彩内容:https://codernav.com