栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Maven依赖冲突表相和解决

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Maven依赖冲突表相和解决

在开发过程往往一个大项目中有多个子工程,每个子工程模块都会有自己的依赖,但是依赖的jar包中往往都还会有依赖,所有就有可能产生依赖冲突;依赖冲突就有可能会对生产有影响,所以需要定位和解决;

依赖冲突常见现象

出现以下现象就需要考虑出现依赖冲突了:

java.lang.NoSuchMethodError
java.lang.ClassNotFoundException
java.lang.NoClassDefFoundError

确定实际开发中出现冲突的类、方法发生在哪个依赖包中;多数同学说查看mvn的依赖关系图就可以查看出冲突的包,以下是查看依赖关系图命令

mvn -U dependency:tree -Dverbose
完整的依赖关系图,且会告诉你哪个包产生了冲突
mvn -U dependency:tree
项目中实际的依赖关系图。

但是在实际开发中,这中方式往往不能快速定位出产生冲突的包和版本,所以本人还建议结合阿里开源的工具Arthas查看运行时,实际冲突的jar包;

依赖冲突产生原因

如图所示,E包1.0.0版本有one一个类,1.0.1版本有one和oneone两个类;项目A依赖了B和C两个jar包,B依赖了E的1.0.0版本,C依赖了D,D依赖了E的1.0.1版本,这样在A中看似是依赖了E包的两个版本,但是实际上根据最短路径原则maven只会引入E包的1.0.0版本;但是A中使用到了oneone类时,运行期就会报错。

注意

依赖冲突是发生在运行阶段,而不是编译阶段,所以问题都是在运行阶段切定位起来比较麻烦;

Maven依赖原则

最短路径原则,先声明先夹在原则

冲突解决

1、排除掉不要的版本
2、需要的依赖在pom中放在前面优先加载(类的加载顺序是根据pom中的依赖的顺序一致的)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732985.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号