IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 彻底学会maven中依赖冲突解决办法(内附实战项目) -> 正文阅读

[Java知识库]彻底学会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

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:34:18  更:2021-08-18 12:34:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:16:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码