彻底学会maven中依赖冲突解决办法(内附实战项目)

背景

关于maven这个自动构建工具,大多数程序员已经用了很久了,最近在编码过程中需要引入其他jar包时不止一次遇到过jar包冲突所带来的问题。所以在此记录一下排查方法。

排查过程

首先根据报错查看源码,你需要断定出来是不是jar包冲突,这个时候比较明显的一些报错是比如明明源码中有这个方法,但是提示确找不到、或者干脆找不到这个类,还有你发现抛出的异常和源码中对应的行数所对应的内容也不一样等等。那么当你通过任何途径大概心理有个底了,就可以上才艺了,方法很多,能够解决问题就是好方法。

常见但不仅限于以下异常:
NoSuchMethodException
ClassNotFoundException
NoClassDefFoundError

举个栗子

在我这个工程中,我引用了org.apache.poi,但是我又想使用com.alibaba的easyexcel。看一下pom文件

 <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.10.1</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
        </dependency>

此时我再启动工程的时候,果不其然出错了。
在这里插入图片描述
看到这里,已经报出了我上面列出的三个异常其中之一。再想想自己引用的jar包,此时心理应该有点*数了对吧。下面就直奔主题开始排查

1.idea自带功能

打开maven菜单,点击show dependencies。
在这里插入图片描述
当然,这里和在pom文件中右击选择maven->show dependencies是一样的
在这里插入图片描述
都会展示jar包的依赖关系。如下图,红色的线就表示冲突了。
在这里插入图片描述
这时可以选中冲突的包然后右键exclude。就可以排除冲突。

2.idea插件

首先我使用的idea工具,可以安装插件maven helper。
在这里插入图片描述
这玩意装好,我们关闭窗口,有可能会叫你restart一下,你就乖乖听话。之后我们打开pom文件并且点击依赖分析。
在这里插入图片描述
这时就会进入到下面这个页面,可以看到左侧列表中已经列出了一些依赖,此时你可以点击Refresh UI用来刷新。
在这里插入图片描述
我们拿到最新的检测结果后可以点击左边的依赖,右边框体内会展示出来冲突的情况。
举个栗子,我们选中poi,再看右边框体,显示了poi引入版本是3.10.1,通过编译可以发现easyexcel2.2.6中存在冲突。
在这里插入图片描述
这时我们可以对冲突内容点击鼠标右键选择跳转到源码jump to source
在这里插入图片描述
这时它跳转到了easyexcel的pom文件中,我们很清晰的查看到了其中依赖的版本
在这里插入图片描述
到这里是不是已经找到了根本问题。那么如何解决呢。我们回到插件的分析页面。还是对着冲突点击右键选择Exclude。
在这里插入图片描述
此时重新刷新maven,再次进入依赖分析页面,点击Refresh UI。可以看到刚才分析出来的冲突少了一个。
此时我们回到pom编辑页面,可以看到easyexcel依赖中使用了exclusions标签排除了poi依赖,所以冲突解决了。

 		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
            <exclusions>
                <exclusion>
                    <artifactId>poi</artifactId>
                    <groupId>org.apache.poi</groupId>
                </exclusion>
            </exclusions>
        </dependency>

到这里,使用插件解决冲突的方法就已经完事了。

3.maven命令

命令行是我最喜欢的操作方式,可以使用mvn dependency:tree -Dverbose命令,以树形结构展现项目中的依赖。
在这里插入图片描述
类似这种情况,当你查看到冲突后,可以在pom中手动排除依赖即可。这里我使用命令去排查的时候并没有展示出来冲突,一般冲突可以在树型结构中搜索’conflict’找到,但是这个栗子并没有,所有有时候我们就多种方法结合,只要能解决问题即可!

项目地址:https://gitee.com/ErGouGeSiBaKe/jar-conflicts

  • 34
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码大师麦克劳瑞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值