maven解决依赖冲突的三种解决方法
前言
随着maven项目不断推进,开发人员难免会遇到这样一个问题,在添加新的依赖jar包后,会发现和原有的项目依赖产生冲突(多数情况是由于依赖传递引起的),这个时候就需要我们根据实际情况来选择生效的最终依赖。
比如下图:

下面将以上面的例子来对如何解决依赖冲突进行讲解
方法一:使用maven提供的传递依赖原则
(一)第一声明者优先原则
其实所谓第一声明者,就是在pom文件中,优先使用书写顺序排在前面的依赖包,也就是谁先声明,就先用谁的依赖。
如果我们想在我们的项目中使用5.0.2版本的spring-bean包的话,只需要调整一下依赖的顺序即可。

(二)路径者优先原则
路径者优先原则也很好理解,如果有两个依赖版本冲突了,那么就显式地在pom文件中把要使用的依赖添加上去。

这种方法虽然简单直接,但是只适合于项目依赖的jar包比较少的场景,一旦管理的依赖数量达到一定数量,简单的调整依赖的顺序并不能解决实际冲突问题。
在实际开发中很少应用到。
方法二:排除依赖(有时候会用到)
排除依赖的思路也很简单,如果有两个依赖的版本发生了冲突,那么只要把其中一个依赖给排除掉,只剩下一个依赖,那么自然就可以解决冲突的问题。
我们只需要使用exclusion关键字对相关依赖进行排除就行

方法三:版本锁定(最常用,推荐使用)
对于版本冲突的问题,我们最常使用的解决方式,是使用dependencyManagement统一对依赖的版本进行定义。这样的话,导入依赖的时候就会直接使用我们锁定的依赖版本。

这里要注意两点,版本锁定和使用路径优先原则不同,使用路径优先原则,是实实在在地将jar包给引入到pom文件中,而版本锁定只是规定了要使用的版本号,只有真实用到了相关的依赖,才生效。同时,版本锁定可以更集中地约束和规定依赖版本,这种优势是其他方法所不能达到的。
当然了,如果只是简单的小型项目,使用其他方式可能是更好的解决方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)