在项目中,经常遇到引用jar包冲突的问题。
一、Maven中jar包冲突原因
1、传递依赖
2、jar包冲突原理
参考文章
二、检测包冲突工具
1、命令行方法
找到冲突包所在的父包
(1)打开idea的Terminal
(2)输入命令:
mvn dependency:tree >> a.txt
(3)打开生成的文件,分析包的依赖关系,找到冲突的包
(4)在pom.xml中排除掉依赖的jar包
举个例子:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
一些指令:
mvn dependency:help
mvn dependency:analyze
mvn dependency:tree
mvn dependency:tree -Dverbose
2、Maven Helper插件
安装使用教程
1、安装完成后,打开项目中的pom文件,下面就会多出一个视图:
2、切换到此试图即可进行相应操作:
(1)Conflicts(查看冲突)
(2)0All Dependencies as List(列表形式查看所有依赖)
(3)All Dependencies as Tree(树形式查看所有依赖)
3、冲突jar包的解决:
切换到maven 依赖视图选择冲突选项,如果有冲突,在左下面区域会有红色显示。
解决冲突,右键单击红色区域,弹出菜单选择Exclude命令,对冲突进行排除。
最佳实践
(1)项目中源代码使用的jar包一定要在pom.xml中显示引用。
(2)经常check一下包冲突,检查是否需要处理
(3)当使用多个模块是,parent一定要使用包管理模块来规范jar包版本,而不是包依赖模块直接引入依赖。
dependencyManagement vs dependencies