前言
随着maven项目不断推进,开发人员难免会遇到这样一个问题,在添加新的依赖jar包后,会发现和原有的项目依赖产生冲突(多数情况是由于依赖传递引起的),这个时候就需要我们根据实际情况来选择生效的最终依赖。
比如下图:
下面将以上面的例子来对如何解决依赖冲突进行讲解
方法一:使用maven提供的传递依赖原则
(一)第一声明者优先原则
其实所谓第一声明者,就是在pom文件中,优先使用书写顺序排在前面的依赖包,也就是谁先声明,就先用谁的依赖。
如果我们想在我们的项目中使用5.0.2版本的spring-bean包的话,只需要调整一下依赖的顺序即可。
(二)路径者优先原则
路径者优先原则也很好理解,如果有两个依赖版本冲突了,那么就显式地在pom文件中把要使用的依赖添加上去。
这种方法虽然简单直接,但是只适合于项目依赖的jar包比较少的场景,一旦管理的依赖数量达到一定数量,简单的调整依赖的顺序并不能解决实际冲突问题。
在实际开发中很少应用到。
方法二:排除依赖(有时候会用到)
排除依赖的思路也很简单,如果有两个依赖的版本发生了冲突,那么只要把其中一个依赖给排除掉,只剩下一个依赖,那么自然就可以解决冲突的问题。
我们只需要使用exclusion关键字对相关依赖进行排除就行
方法三:版本锁定(最常用,推荐使用)
对于版本冲突的问题,我们最常使用的解决方式,是使用dependencyManagement统一对依赖的版本进行定义。这样的话,导入依赖的时候就会直接使用我们锁定的依赖版本。
这里要注意两点,版本锁定和使用路径优先原则不同,使用路径优先原则,是实实在在地将jar包给引入到pom文件中,而版本锁定只是规定了要使用的版本号,只有真实用到了相关的依赖,才生效。同时,版本锁定可以更集中地约束和规定依赖版本,这种优势是其他方法所不能达到的。
当然了,如果只是简单的小型项目,使用其他方式可能是更好的解决方法。