maven工具之使用dependency插件快速定位jar版本冲突的几个小技巧

    前言出现jar包版本冲突的原因蛮多的,比如:版本没控制好,引入的第三方依赖的间接依赖的版本冲突等。目前笔者遇到的最多的是间接依赖导致的冲突,所以好多时候需要快速定位是哪些个jar包都引用了某个依赖,但是该依赖的版本不一样导致的冲突。

    现象jar包版本冲突比较常见的一个现象就是调用某个API时:出现java.lang.NoSuchMethodException异常。

    场景:比如你在工程pom中引入一个jar,调用它的某个接口,出现没有这个方法异常,而你又可以确认这个jar包已经引入工程了,在pom.xml的其它地方再没有该jar包其它版本的依赖。那就不用怀疑,这肯定是pom中某个依赖又间接或直接依赖了这个jar包的其它版本。

    1、笔者可以首先提供一个治标不治本的办法:调整jar包依赖顺序。

    在开发工具中,如:IDEA、eclipse都可以调整下依赖的jar包顺序,不清楚怎么调整可以查下相关资料。或者是把你显示依赖这个jar在pom.xml中的配置放到pom.xml的其它依赖的最前面,反正就是确认编译的时候这个jar会比导致冲突的那个jar最先加载就行。然后,你在IDE中运行测试的时候一般就会发现冲突的问题解决了。

    但是,之所以说这种属于治标不治本,原因在于两点:1、这并不是真的解决了,这个依赖于你的IDE,一旦发布部署,问题直接暴露。2、有些时候,连治标都治不了,比如一个多模块工程,内部依赖比较复杂,或者多层pom继承的比较多,这种情况下,也是有可能连治标都治不了了,当然也要看具体情况。

    治标不治本笔者还推荐的原因是因为:如果你无法确定是不是jar包冲突导致的时候,可以拿这种方法测试下,如果临时解决了,那就是冲突导致的,然后再确定哪个地方的原因。如果万一没解决掉,也不要认为就一定不是冲突的原因,换下面我说的方法确认下吧。

    首先,先简单说下dependency插件要用到的2个目标:

    Dependencytreelist

    这两个目标的执行命令分别是:mvn dependency:tree和mvn dependency:list。一个显示当前pom中的依赖树(所有依赖,直接/间接),list显示所有的依赖(直接/间接)

    ps:本文说到的解决问题的小思路主要以windows为例,Linux类似

    也可以不用命令,在IDE中如eclipse,打开pom.xml在编辑区的下方有一排tab,其中一个是dependency tree,打开之后,上面主要显示两部分,左边是依赖树(相当于执行mvn dependency:tree的结果),右边是依赖列表(相当于执行mvn dependency:list的结果),可以在左边依赖树慢慢看,看是哪个依赖冲突了,如果冲突会看提示的。然后再看是哪些jar依赖了这个Jar,但是版本不一致冲突的,然后解决就行了。

    如果不想一点点看,可以执行命令,比如windows,可以执行mvn dependency:list | findstr "jar的groupId"(findstr 相当于Linux的 grep),然后根据查找的关键字,会把这些jar都列出来,便可以看到都有哪些版本的依赖,便可以确定是冲突了,但是如果想要确定,是谁依赖的哪个版本,就需要用tree目标了。

    使用tree目标来查找依赖关系的,可以使用命令,把匹配住的前面几行也打印出来,就看到是谁的依赖了,如linux下的mvn dependency:tree | grep "groupId" --context=5(把找到的前后5行打印出来)。

    或者执行命令mvn dependency:tree > tree.log(windows或linux都能用),记录到一个文件内,然后用一个文件编辑器或者vim都行,用关键字去查找,都可以快速定位到的。

    一般查找到解决就好解决了,如用exclusions等把某个依赖去掉。当然了,也有其它一些办法,这都是要看情况的。

    后续有其它更快速定位的小技巧再进行补充。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不识君的荒漠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值