maven 解决冲突

本文深入探讨Maven项目中jar包冲突的根源,包括传递依赖特性和依赖仲裁规则。提供了详细的排查方法,如使用mvn命令进行清理和安装,查询依赖关系并分析冲突。同时介绍了如何利用Maven插件和命令行选项来有效管理和解决依赖冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Maven之jar包冲突解决(理解maven 产生冲突的原因)

导致jar包冲突的原因
1、mvn的传递依赖特性:mvn编译打包除了会引入直接申明的依赖,还会引入间接申明的依赖

2、mvn的依赖仲裁规则:

    1). 按照项目总控POM的DependencyManager版本声明进行仲裁。

    2). 如无仲裁声明,则按照依赖最短路径确定版本。

    3). 若相同路径,有严格区间限定的版本优先。

    4). 若相同路径,无版本区间,则按照先入为主原则。

https://blog.youkuaiyun.com/qq_32600229/article/details/79208351

2.eclipse  maven排查jar包版本冲突

场景描述
有时候在pom中引入了新的jar包,由于maven会根据传递依赖,将该jar包依赖的其他jar包自动下载。因此,自动下载的jar包和已存在的jar包可能存在相同的jar包,但是版本不一致。此处就造成了冲突

排查方法
1、在命令行中,跳转到项目路径。
2、先清除,再重新安装:mvn clean install. 如果不想运行单元测试类,则运行命令:mvn -Dmaven.test.skip=true clean install 
3、查询依赖关系,并导入到名为tree.txt的文件中:mvn dependency:tree -Dverbose > tree.txt 
4、在tree.txt文件中搜索:conflict。如果存在,则有冲突jar包,需确定jar包版本,把不需要的jar包版本排除。

下图为tree.txt中存在冲突的jar包样例

æä»¶å®ä¾

补充:

eclipse  首先点击demo 项目 然后使用  ctrl +alt +t 打开eclipse cmd 窗口入下图:直接跳入到demo 本地目录中了。然后在之前上面提供的命令;

https://blog.youkuaiyun.com/cchengone/article/details/78295269?locationNum=5&fps=1 

补充:https://www.jianshu.com/p/bbd5b0abcad1--命令方式建议参考

 

maven 检查依赖冲突和版本冲突

在项目发布的时候,一般都需要进行依赖冲突检查或者重复类的检查,这个时候我一般会使用下面的两个命令:

1

2

3

mvn -U clean package -Dmaven.test.skip=true enforcer:enforce -DcheckDeployRelease_skip=true -Denforcer.skip=false

 

mvn -U dependency:tree -Dverbose

dependency: tree是检查版本冲突的

enforcer:enforce是用来检查重复类的

简单地用 dependency:tree往往并不能查看到所有的传递依赖。不过如果你真的想要看所有的,必须得加一个 -Dverbose参数,这时就必定是最全的了。

全是全了,但显示出来的东西太多有时候会很烦,加上 Dincludes或者 Dexcludes,就会包含或者排除你指定的依赖了, dependency:tree就会帮你过滤出来:比如:

mvn dependency:tree -Dverbose -Dincludes=asm:asm 就会出来asm依赖包的分析信息。

https://www.cnblogs.com/adolfmc/p/6069983.html

3.Maven Idea查看解决jar包冲突

https://www.jianshu.com/p/a8a77d6262ed

4.Maven中 jar包冲突原理与解决办法(maven helper 插件)

https://blog.youkuaiyun.com/noaman_wgs/article/details/81137893

### 解决Maven依赖冲突的插件 `maven-dependency-plugin` 是 Maven 官方提供的工具,旨在帮助开发者分析并解决项目中的依赖冲突问题[^2]。 #### 插件功能概述 此插件提供了多种目标(goals),可以执行不同类型的依赖操作。对于处理依赖冲突而言,最常用的命令之一是 `dependency:tree`。通过运行该命令能够可视化整个项目的依赖树结构,从而更容易识别哪些地方出现了重复或不兼容的库版本。 ```bash mvn dependency:tree ``` 上述命令将会打印出当前工程所涉及的所有直接与传递性的依赖关系图谱,并标注任何潜在存在的版本冲突情况[^4]。 另外还有其他一些有用的子命令可用于更细致地排查问题: - 使用 `mvn dependency:list` 来获取一份简洁明了的已解析依赖列表; - 应用 `mvn help:effective-pom` 查看实际生效POM文件中定义的所有配置项以及继承自父级POM的部分; - 调用 `mvn dependency:analyze` 对比编译源码所需的类路径同打包产物之间的差异,找出未声明却使用的外部资源或是冗余无用的引用。 #### 处理策略建议 针对具体场景下的冲突解决方案可能有所不同,但通常遵循如下原则来决定保留哪一个版本号作为最终选择依据: 1. **优先考虑显式指定者**:如果两个以上的地方都指定了相同坐标的不同版次,则以离根节点最近的那个为准——即所谓的“就近覆盖远”的规则[^3]。 2. **尊重范围限定**:某些情况下即使存在多个候选对象也可能因作用域设置而互不影响;比如测试期间独享的一套独立于主构建流程之外的小环境里加载特殊定制化组件就不会干扰到正式发布物里的相应位置。 3. **借助BOM协调机制**:引入Bill of Materials (BOM) 文件可有效简化跨模块间保持一致性的维护工作量,特别是大型企业内部多团队协作开发时尤为适用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

利剑 -~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值