maven的pom.xml用<exclusion>解决版本问题

maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用<exclusion>来排除一些不需要同时下载的依赖jar 。

导致jar包冲突的原因

1、mvn的传递依赖特性:mvn编译打包除了会引入直接申明的依赖,还会引入间接申明的依赖

 

2、mvn的依赖仲裁规则:

    1). 按照项目总控POM的DependencyManager版本声明进行仲裁。

    2). 如无仲裁声明,则按照依赖最短路径确定版本。

    3). 若相同路径,有严格区间限定的版本优先。

    4). 若相同路径,无版本区间,则按照先入为主原则。

 

3、依赖的scope会影响依赖的影响范围。

 

 

简单冲突解决的三途径!

 

1、根据报错的class名或方法名定位到可能导致冲突的jar包,jar包冲突引入有几种情况:

    1).  引入了这个jar包的多个版本,而mvn仲裁的时候取了错误的版本,这个版本本身就缺少正确的class或方法。

    2).  引入了不同坐标但是具有同名class的多个jar,mvn加载class的顺序差异会导致加载到错误的class。

2、通过mvn dependency:tree  >  tree.txt 导出全部的依赖。 可以使用 -Dverbose 、-Dincludes或者-Dexcludes参

数来精确定位导致冲突的jar包。 

3、找到需要排除的依赖jar包,通过mvn仲裁优先的方法定义正确的jar包,或者通过exclusion的方式排除错误的jar包。

4.温馨提示:另外在项目开发中jar尽量按需引入,系统管理起来,别什么都不管直接加包进来,这样也可以在一定程度上减少jar

包冲突的风险。

转载于:https://my.oschina.net/u/3489292/blog/2084858

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值