Maven存在的jar包冲突问题

一、智能的maven

在使用maven时,maven对依赖的处理方式是递归引入,也就是说你引入a,就会自动引入a需要的包a-1、a-2等,同样,在引入a-1时,会自动引入a-1需要的包a-1-1和a-1-2等,这个智能的功能虽然很好用,但是有一些问题需要我们解决。

二、智能导致的问题

问题产生的根源是包是存在多版本的,这就导致在进行递归引入时,很有可能同一个包会被多个不同的上游引入,且上游引入时需要的版本不一样,这就导致了同一个包不同版本的冲突,maven会保证在同一个包出现多个不同版本的引入时,进行仲裁,最终只保留一个版本的包。这样才能保证程序有可能运行起来。

三、maven自己的解决方式

maven在进行多版本包仲裁的策略就最短路径优先,然后是最先声明优先,比如有:
a->b->c1
e->c2
这两种依赖,那么maven会选中c2,当路径相同时,就要比较在pom文件中的顺序了,因为pom文件中的顺序是一定有先后的,所以不会出现无法仲裁的情况,也就是说,maven最终总能从多个版本的包中选出一个。

四、maven自己有时解决不了

maven确实会帮我们仲裁出唯一的包,但是有可能他选出的那个版本不是我们想要的,导致有些类型或方法找不到,或是某个版本是有漏洞的,安全扫描不通过
Caused by:java.lang.NoSuchMethodError
Caused by: java.lang.ClassNotFoundException
此时就需要我们手动介入,我们处理的原则就是要找出某个包的所有引入上游,然后确定我们需要的那个上游,将优先级高于我们选中的上游的其他上游直接<exclusion>掉,需要注意的是,很多时候我们不需要将所有的上游中都<exclusion>,只需要将优先级较高的处理掉就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值