maven中有重复依赖该怎么搞

最佳解决Maven同一依赖多版本共存问题,重复依赖(同一个jar包,多个版本)-maven-shade-plugin 公司的历史项目在导出功能上引用的是poi-3.12版本,后续再做word模板导出功能时用到了poi-3.15版本,升级完后发现项目的很多导出功能都瘫痪了。用旧版本,新功能无法使用;用新版本,旧功能瘫痪,且整改的工作量比较大。使用maven-shade-plugin,将某个版本的依赖名称进行修改,重新引入即可。 阅读详情

在开发过程中,可能不可避免地都遇到过依赖版本重复,导致运行出现问题的情况,如果你遇到过,建议你看看,如果你还没遇到过,更建议你看看。

在我们项目结构比较小的时候,可能只有一两个pom文件,通过肉眼就能看到有没有重复依赖项,但是当我们的项目开发越来越庞大,除了自己引入的依赖,还有一些通过第三方库间接引入的依赖,一旦出现依赖冲突,并且版本不一致时,很有可能会导致我们的项目在运行时出现问题。

本期内容,主要包括以下内容:

  • 如何快速检查pom中的重复依赖项
  • 如何在构建时有重复依赖强制失败

为什么要检测重复依赖关系

如果在pom中有重复依赖,有一个主要的风险点,就是在我们构建时,可能高版本的依赖不会构建在我们项目中。

例如有以下pom.xml:

<project>
    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.11</version>
        </dependency>
    </dependencies>
</project>
复制代码

引入了commons-lang3的两个依赖项,并且版本不同。接下来,让我们看看如何使用Maven命令来检测这些重复依赖项。

dependency:tree命令

通过终端运行命令mvn dependency:tree并查看输出。

从日志中我们可以看到,有warning日志提示存在重复依赖项(标注1处);并且最后构建到项目中的是3.11版本(标注2处),是因为maven在选择依赖项时会选择最后一个。

dependency:analyze-duplicate 命令

接下来我们通过命令dependency:analyze-duplicate来检查重复依赖项:

从结果看,同样会在WARNING日志中打印重复依赖项,并且在INFO日志中会列出重复依赖的jar。

有重复依赖强制构建失败

在上文中,我们了解到如何检测重复依赖项,但构建仍然会成功,这可能会导致使用的jar包版本不正确。

我们可以使用maven enforcer插件,如果存在重复的依赖项,可以确保构建不成功。

需要先将maven enforcer插件添加到pom.xml中,并添加一个规则banDuplicatePomDependencyVersions:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>no-duplicate-declared-dependencies</id>
                    <goals>
                        <goal>enforce</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <banDuplicatePomDependencyVersions/>
                        </rules>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
复制代码

接下来我们进行验证:

可以看到构建失败。

一旦我们确定了重复的依赖项,我们就可以在pom.xml文件中删除,保留我们需要的依赖。

小结

在本期内容中,主要讲述如何使用mvn dependency:tree和mvn dependency:analyze-duplicate命令检测maven中的重复依赖项。

我们还了解了如何使用maven enforcer插件通过内置规则来使包含重复依赖项的应用构建失败。

Maven 依赖排查 总之,这两个术语都涉及Maven在构建项目时如何处理依赖冲突,但“omitted for duplicate”更侧重于描述多个相同依赖项的存在,而“omitted for conflict with”则更具体地指出了哪个依赖项与当前依赖项存在冲突。在 Maven 的依赖树中,当你看到“omitted for conflict with 1.0.5”这样的信息时,它意味着 Maven 在解析依赖时遇到了版本冲突,并决定省略(排除)了与指定版本(在此例中为 1.0.5)冲突的那个依赖。 阅读详情

相关推荐

解决Maven重复依赖问题(同一个jar包,多个版本)maven同一依赖多版本共存 maven处理mysql-connector-java多版本问题 解决无法将“mvn”项识别为xxx jarjar

今天有个项目,该项目之前依赖的是`mysql-connector-java-5.1.24.jar`的jar包,现在需要升级为`mysql-connector-java-8.0.29.jar`,而且,项目中还要保留`5.1.24`的版本,那么,怎么解决这个问题呢?我们可以使用jarjar这个框架解决,但是它怎么使用呢,这篇文章可以详细说明。...............

念兮为美 6095

【maven】Maven删除重复的依赖关系、maven-enforcer-plugin插件

本文中,我们学习了如何使用mvn dependency:tree和mvn dependency:analyze-duplicate命令检测Maven中的重复依赖,还学习了如何使用Maven Enforcer插件,通过应用内置规则使包含重复依赖的构建失败。

九师兄 690

解决Android项目中的重复依赖问题及实用经验

在开发Android应用程序时,我们通常使用各种依赖库来加快开发过程并提供额外的功能。然而,有时候我们可能会遇到重复依赖的问题,这可能导致编译错误、构建失败或应用程序崩溃。本文将介绍如何查找和解决Android项目中的重复依赖问题,并分享一些实用经验和技巧。

TechBlitzZ的博客 1167

IDEA中解决重复依赖问题(Maven)

解决项目中重复依赖问题

想象之中丶 4076

反制反心理特征的研究

抓牛股

m0_58032574的博客 908

别再纠结VS还是VSCode了!新手C#环境搭建保姆级指南(含.NET Core安装验证)

本文为C#新手提供Visual Studio与VS Code的深度对比及环境搭建指南,涵盖.NET Core安装验证、工具选择决策框架及实战配置技巧。帮助开发者根据项目需求选择合适工具,快速搭建高效开发环境,提升编码效率。

weixin_30455023的博客 561

maven中有重复依赖该怎么搞(1)

1、看视频进行系统学习这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。2、读源码,看实战笔记,学习大神思路“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。

D1561691的博客 1001

别再硬啃C代码了!用Simulink的Matlab Function模块手把手教你搭建CRC8校验模型(附完整M脚本)

本文详细介绍了如何利用Simulink的Matlab Function模块轻松实现CRC8校验模型,替代传统的C代码编写。通过可视化建模和即时验证,开发者可以高效完成算法设计,并自动生成嵌入式代码。文章包含完整的M脚本示例和工程实践技巧,特别适合嵌入式系统开发人员提升工作效率。

weixin_42520661的博客 183

关于maven的依赖重复问题

大家使用maven的时候,经常会遇到依赖重复的问题。比如velocity1.6.4依赖commons-lang2.4,commons-configuaration1.2 也依赖commons-lang但是版本是2.1。这样就会用两个commons-lang的jar。一般情况下也不会有什么问题,但是如果要是依赖多个servlet-api。在容器启动的时候,就会报错,比如spring 的过滤器加载的时

bbsnba123的专栏 4739

matlab电容式传感器仿真,差动电容式位移传感器的仿真研究

设计了一种差动电容式位移传感器,主要对传感器的数学模型及电容检测电路进行了仿真研究。其中检测电路设计主要包括正弦激励电路、转换桥路、信号放大电路、精密整流电路和滤波电路。最后利用Matlab/SimurFnk软件对所设计的系统进行仿真,并分析了传感器性能。仿真研究表明,传感器及其检测电路具有合理性,测量范围内具有很好的线性度。0|| I≯ lat on ii{差动容尊翩’亘研发注:湖南省教育厅资...

weixin_36323601的博客 1390

告别视频广告:OpenWrt下luci-app-adbyby plus/lite的完整配置与避坑手册

本文详细介绍了在OpenWrt路由器上配置Adbyby Plus/Lite广告屏蔽工具的完整流程与优化方案。从环境准备、规则文件手动配置到高级性能调优,帮助用户有效拦截视频前贴片广告和弹窗广告,提升家庭网络浏览体验。特别针对官方源停止维护的问题,提供了实用的规则更新解决方案。

weixin_29306011的博客 737

浅探maven处理重复依赖不同版本的方式

一、前言 大家在处理maven依赖时,肯定都有遇到过包冲突的问题,其中最常见的就是在多级依赖时,会同时引入一个jar包的不同版本,导致在运行时出现NoSuchMethodError的错误,那么大家肯定会好奇对于这些情况maven是怎么去选择版本的呢?其中网上挺多文章已经都解密了它的处理方式,我这里先把这些方式抛出来,然后一个个的去验证它们。 当一个项目中出现重复的依赖包时,maven 2.0.9之后的版本会用如下的规则来决定使用哪一个版本的包: 1、最短路径原则 2、声明优先原则 3、同级依赖后加载覆盖先

KD的博客 1万+

【项目实战】小智AI MCP协议在IoT设备控制中的深度应用解析

本文深度解析小智AI MCP协议在IoT设备控制中的应用实践。通过MCP协议作为AI与物联网设备的翻译桥梁,实现大语言模型与ESP32等硬件的无缝通信。文章详细介绍了环境搭建、工具注册、消息路由机制,并以语音控制RGB灯光系统为例展示完整开发流程,为AIoT开发者提供实用指南。

oauth7security的博客 824

解决Maven重复依赖问题(同一个jar,多个版本)

问题描述 现在开发项目,一般都会创建maven工程,用它来管理依赖实在是方便了,当然它还有其它用途。但是在实际的情况中往往会有重复依赖的问题,比如创建的工程A,依赖了b-1.0.jar,而b-1.0.jar又依赖了d-1.0.jar(这个我们本身是不能直接看到的),同时我们自己的工程又依赖了d-2.1.jar,或者工程A依赖了c-1.0.jar,c-1.0.jar依赖了d-2.0.jar,显然,d...

小胖 4万+

SAP Word 模板与 ABAP XML 数据流合并机制深度解析

Office Open XML 标准把一个.docx拆分成多个部件(document.xml、customXml\item1.xml 等),天然支持命名空间与 XPath;Word 在渲染时,会扫描<w:sdt>(结构化文档标签)与来确定绑定关系;在 ABAP 端,通过简单字符串替换与 XSLT 变换即可完成数据灌入,无需 COM Automation,安全且易于调试。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 371

17track单号查询逆向分析

这就说明该网站很有可能存在其它检测点,而检测本地替换最大可能的就是检测了代码格式化或者代码长度。也一样,要么导致网站卡死,要么会导致网页加载异常,这里可能就难到不少人了,让我们一步一步解决。而这个站主要是检测了代码格式化,无限循环检测造成了网站卡死,经多次测试发现检测点共三处。方法中代码很长,但是经调试后发现,它其实只返回一个固定的值,这里直接写死即可。同样的,虽然看起来很长,但是跟过之后就会发现流程很简单,这里主要就是对。追加了一些值,是一条很长的语句,整理代码。,核心流程也很简单,稍微跟一下就出来了,

pyzzd的博客 1621

maven 重复依赖不同版本 选择规则

maven 重复依赖不同版本 选择规则 本篇主要来看看 maven 对于 重复依赖的jar的不同版本时候 它内部的选择规则, 很多时候我们在搭建环境的时候 不注意就会存在依赖冲突等问题 那依赖冲突的时候 为什么maven选择了不是你如你所想的jar 版本呢 , 其实都是有一定规则的 下面来看看吧 1.前言 我们在使用maven 的时候 多多少少遇到过jar包冲突的问题, 在对一个jar包引入不同版本后,可能会导致NoSuchMethodError 错误, 那么你真的清楚 maven 在多个版本jar的时

qq_34285557的博客 4226

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Maven 插件之 maven-enforcer-plugin 解决冲突重复依赖

在项目构建时,通过规则来约束项目配置,如jdk 、maven 版本,是否有重复的类,文件编码,文件大小等等,且规则是可以自己扩展的。maven 项目种经常出现 jar 包冲突、重复依赖、无效引用怎么办,maven-enforcer-plugin 了解一下。提供了管控一系列环境约束的目标,包括但不限于Maven版本、JDK版本和操作系统家族等多个内置规则以及用户自定义规则。结果输出,可重点关注 Duplicat classes 部分。重复的pom 依赖配置 输出结果。更多使用欢迎大家一起来发掘探讨。

牧码人的专栏 6551

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IDEA中去除maven重复依赖,冲突依赖

背景:maven是管理我们项目jar包的一个很好的工具,但是我们开发时就会不知不觉的造成jar冲突,或者是重复依赖,由于一些其他dependency中包含了某个jar,然而我们又导入了其他jar,这样造成整个项目的jar冗余,庞大,下面就教大家一些去除重复或者冲突依赖的方法、 开发工具:IDEA 1,如下图:点击右上角的show Dependencies, 就会出现左边的依赖树图 ...

weixin_42533856的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【技巧】Maven重复依赖分析查找

【技巧】Maven重复依赖分析查找遇到奇葩的错误可以考虑是不是依赖冲突了比如同一段代码 再这个项目中好好的 另一个项目中不能用等idea安装插件。

我是Superman丶的博客 4783

idea如何查找maven依赖、查看依赖关系、删除重复的jar包

首先介绍一个背景,2021年12月10日,log4j出了个漏洞,然后我这个小开发就有活了

lh155136的博客 2万+

maven依赖包重复查找处理方法

3、执行:$ mvn dependency:tree |cat -n 查所有的依赖包列表,找到172行里索引的父包是145行,回到项目里的maven pom.xml父包里排除欧了。比如,在pom.xml中引用公司内部自己封装的依赖包底层都有封装依赖redis,然后想升级,排除之前的依赖包,可能不好找。1 打开idea右边的maven管理窗口,点击packager,点击那个图标,就会打开左侧的依赖关系图;2、 剔除某个包,可以右键选择Exclude--此操作有的idea版本可能没有找到。

dengxw00的博客 812

【在Idea中如何解决Maven重复依赖或者依赖冲突】

在Idea中解决maven依赖问题

weixin_41435451的博客 2527

idea模块依赖重复_【Maven】依赖重复和冲突的问题

解决Maven包依赖重复、冲突导致(omitted for duplicate、omitted for conflict with x.y.z)问题Java开发者避免不来使用Maven,你的项目避免不了依赖第三方的jar包,避免不了会发生依赖重复和冲突。到底是怎么产生的呢?举个例子,很容易理解。YourApp依赖Ajar,Ajar依赖Xjar-1.0、Yjar-1.0,还依赖Bjar,Bjar依赖...

weixin_39800875的博客 1884

maven重复依赖解决方案

概述 这几天在学习Spark-streaming做流式计算,一开始写了一个比较简单的测试程序能够顺利运行,但是当在项目pom.xml中加入了一些项目公共依赖之后就死活编译不过,或者能编译过但是不能run,根本原因就是如下这些包: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dependency> groupId>org.a

北漂码农 2618
上一篇: 面试造火箭系列,栽在了cglib和jdk动态代理
下一篇: 难搞的偏向锁终于被 Java 移除了
superjava_
博客等级 码龄5年 254粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值