Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >是时候装逼了,试试 IDEA 解决 Maven 依赖冲突的高能神器!

是时候装逼了,试试 IDEA 解决 Maven 依赖冲突的高能神器!

作者头像
良月柒
发布于 2021-05-08 02:32:00
发布于 2021-05-08 02:32:00
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

来自:sf.com/a/1190000017542396

Hello,大家好,我是良月柒。

不管做什么,只要坚持下去就会不一样!

今天,来讲一个 Maven 经典实战问题,依赖冲突。

1、何为依赖冲突

Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。举个例子,现在你的项目中,使用了两个Jar包,分别是A和B。现在A需要依赖另一个Jar包C,B也需要依赖C。但是A依赖的C的版本是1.0,B依赖的C的版本是2.0。这时候,Maven会将这1.0的C和2.0的C都下载到你的项目中,这样你的项目中就存在了不同版本的C,这时Maven会依据依赖路径最短优先原则 ,来决定使用哪个版本的Jar包,而另一个无用的Jar包则未被使用,这就是所谓的依赖冲突

在大多数时候,依赖冲突可能并不会对系统造成什么异常,因为Maven始终选择了一个Jar包来使用。但是,不排除在某些特定条件下,会出现类似找不到类的异常 ,所以,只要存在依赖冲突,在我看来,最好还是解决掉,不要给系统留下隐患。

2、解决方法

解决依赖冲突的方法,就是使用Maven提供的**** 标签,**** 标签需要放在**** 标签内部,就像下面这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.10.0</version>
    <exclusions>
        <exclusion>
        <artifactId>log4j-api</artifactId>
        <groupId>org.apache.logging.log4j</groupId>
        </exclusion>
    </exclusions>
</dependency>

log4j-core本身是依赖了log4j-api的,但是因为一些其他的模块也依赖了log4j-api,并且两个log4j-api版本不同,所以我们使用**** 标签排除掉log4j-core所依赖的log4j-api,这样Maven就不会下载log4j-core所依赖的log4j-api了,也就保证了我们的项目中只有一个版本的log4j-api

3、Maven Helper

看到这里,你可能会有一个疑问。如何才能知道自己的项目中哪些依赖的Jar包冲突了呢?Maven Helper这个InteliJ IDEA的插件帮我们解决了这个问题。插件的安装方法我就不讲了,既然你都会Maven了,我相信你也是会安装插件的。

在插件安装好之后,我们打开pom.xml文件,在底部会多出一个Dependency Analyzer 选项

图片

点开这个选项

图片

找到冲突,点击右键,然后选择Exclude 即可排除冲突版本的Jar包。

4、小技巧

除了使用Maven Helper查看依赖冲突,也可以使用IDEA提供的方法——Maven依赖结构图,打开Maven窗口,选择Dependencies,然后点击那个图标(Show Dependencies)或者使用快捷键(Ctrl+Alt+Shift+U),即可打开Maven依赖关系结构图

图片

在图中,我们可以看到有一些红色的实线,这些红色实线就是依赖冲突,蓝色实线则是正常的依赖。

图片

<END>

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
解决Maven依赖冲突的好帮手,这款IDEA插件了解一下?
Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。
xcbeyond
2020/10/21
2.5K0
解决Maven依赖冲突的好帮手,这款IDEA插件了解一下?
Maven依赖冲突问题
依赖冲突是指:在 Maven 项目中,当多个依赖包,引入了同一份类库的不同版本时,可能会导致编译错误或运行时异常。
政采云前端团队
2024/01/31
6420
Maven依赖冲突问题
解决jar包冲突的简单办法
解决jar包冲突的简单办法– 在使用log4j.properties时,pom中导入的一些jar会产生log4j类的冲突报错,以下是一个简单的pom配置:
一滴水的眼泪
2020/09/24
2.3K0
解决jar包冲突的简单办法
maven依赖冲突以及解决方法
依赖冲突很经常是类包之间的间接依赖引起的。每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引入进来,从而造成类包冲突
lyb-geek
2020/06/23
2.9K0
maven依赖冲突以及解决方法
Apache Log4j漏洞修复
这个应该是技术人最近谈的比较多的话题了,有的公司连夜在修复,这个时候也体现每家公司的工程化能力了,是一个个应用去发版,还是只要中间件层面动一动就可以看到各家公司的技术实力了。
心平气和
2021/12/13
1.4K0
Apache Log4j漏洞修复
说说maven依赖冲突,依赖调解,依赖传递和依赖范围
当前项目引入了一个依赖,该依赖的依赖也会被引入项目。更加准确的说法是,maven会解析直接依赖的POM,将那些必要的间接依赖,以传递依赖的形式引入到当前项目中。
用户1289394
2021/01/20
1.3K0
Maven快速入门
Maven是Java中最为普及的包管理工具,在实际项目中由于依赖的各类jar包非常多,因此概念清晰的处理好各类Jar依赖显得非常重要,接下来通过基础知识,Jar包主要分类方式和进阶知识来介绍。 基础知
用户1216676
2018/01/24
1.5K0
解决java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound
在使用Java编程的过程中,我们常常会遇到各种各样的错误和异常。其中一个常见的问题是在依赖库中出现了相互冲突的情况,比如在使用日志框架时可能会出现​​java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path​​的异常。这个异常是由于在项目的依赖中同时存在了​​log4j-over-slf4j.jar​​和​​slf4j-log4j12.jar​​这两个不兼容的库引起的。
大盘鸡拌面
2023/11/03
7440
maven jar包冲突解决
此时,在pom.xml 再添加一个spring-beans的jar包,注意版本是4.3.16.RELEASE
sunonzj
2022/06/21
5910
maven jar包冲突解决
Maven 基础(二) | 解决依赖冲突的正确姿势
假设,在 JavaMavenService2 模块中,log4j 的版本是 1.2.7,在 JavaMavenService1 模块中,它虽然继承于 JavaMavenService2 模块,但是它排除了在 JavaMavenService2 模块中继承 1.2.7 的版本,自己引入了 1.2.9 的 log4j 版本。
JavaFish
2020/02/18
8820
maven 依赖jar包时版本冲突的解决:mvn dependency:tree -Dverbose
maven 依赖jar包时版本冲突的解决: mvn dependency:tree -Dverbose
一个会写诗的程序员
2018/08/17
9.6K0
maven 依赖jar包时版本冲突的解决:mvn dependency:tree -Dverbose
Maven解决jar包版本冲突
jar包冲突主要是由于依赖传递导致的,不同的jar包依赖同一个不同版本的jar包,导致冲突。可以看下下图。
红目香薰
2022/11/29
1.7K0
Maven解决jar包版本冲突
Maven实战进阶(01)面试官:Maven怎么解决依赖冲突?| 有几种解决方式
Maven是什么?在很多初中级研发印象里,Maven只是系统项目里的一个pom.xml文件,甚至连mvn clean package命令都逐渐模糊。而项目研发技术leader、架构师已经把依赖管理、插件配置、整个系统的devops管理都做好了。大部分时间,大家只需要专注迭代完成系统业务功能开发。
拉丁解牛说技术
2025/01/16
2760
Apache Log4j2详解
在项目开发中,都不可避免的使用到日志。没有日志虽然不会影响项目的正确运行,但是没有日志的项目可以说是Java
Java架构师必看
2021/07/15
1.3K0
我也想说说日志,但是我不想说漏洞。
我就想验证一下上手难度到底有多低,于是我翻了很多文章,都是大同小异,说出漏洞了,很牛逼,赶紧修吧,晚了就玩完啦。然后配上一个唤起了计算器的截图,就结束了,也没有人告诉我到底怎么玩啊。
why技术
2021/12/13
3870
我也想说说日志,但是我不想说漏洞。
Maven经验分享(八)maven去除jar报依赖
在新项目的开发中,使用maven进行持续构建,在搭建框架的过程中经常遇到jar冲突的问题,现在来介绍下如何去除jar传递依赖。
一笠风雨任生平
2019/08/02
8680
Java日志体系框架总结:JUL、JCL、SLF4J、Log4j、Logback、Log4j2
日志记录是应用程序运行中必不可少的一部分。具有良好格式和完备信息的日志,可以在程序出现问题时帮助开发人员迅速地定位错误的根源。日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息、状态信息、调试信息和执行时间信息等。
johnny666
2024/09/24
3890
JAR冲突问题的解决以及运行状态下如何查看加载的类
今天碰到群里小伙伴问,线上程序好像有多个不同版本的Netty包,怎么去看到底加载了哪一个? 在说如何看之前,先来说说,当你开始意识到项目里有多个不同版本的Jar包,都是因为遇到了这几个异常: 1、java.lang.NoSuchMethodException:自己代码中调用了某个方法,因为加载了其他版本的jar,这个版本正好没这个方法。 2、java.lang.NoClassDefFoundError:编译时候是好的,但是运行的时候,因为加载的jar版本问题,没有这个类。 3、java.lang.Cla
程序猿DD
2023/04/04
8270
JAR冲突问题的解决以及运行状态下如何查看加载的类
Maven系列第3篇:详解maven解决依赖问题
maven是apache软件基金会组织维护的一款自动化构件工具,专注服务于java平台的项目构件和依赖管理。
路人甲Java
2019/11/14
2K0
Maven系列第3篇:详解maven解决依赖问题
maven多模块和依赖冲突问题汇总记录
maven多模块和依赖冲突问题汇总记录目录前言:idea怎么创建maven多module的项目首先了解上面是多module?多Module管理项目的几种方式:创建一个多module项目(idea2019.3.3版本)创建一个父pom项目:创建子模块,引入到父pom里面子父模块的区别:父pom.xml文件内容:子pom.xml文件内容:子模块之间进行互相的依赖将上面的项目改造为spring-boot多模块项目:改造父pom文件:Spring boot maven plugin问题MAVEN依赖冲突问题:依赖的传递原则:maven的依赖引入策略最短路径原则:最先声明原则:如何解决依赖冲突的问题锁定版本法什么情况下会出现Jar包冲突问题如何查找和发现jar包冲突?1. 利用idea的maven视图工具2. Idea Maven Helper 插件3. maven命令工具:如何写一个干净依赖关系的POM文件dependency:analyze-only 命令mvn dependency:analyze-duplicate 命令
阿东
2021/08/16
4.3K0
maven多模块和依赖冲突问题汇总记录
相关推荐
解决Maven依赖冲突的好帮手,这款IDEA插件了解一下?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验