`

如何快速的解决Maven依赖冲突

阅读更多
为什么会出现依赖冲突

首先要说明Maven的依赖管理,具体的可以参考这边 Maven学习——依赖管理 这篇文章,maven在依赖冲管理中有一下几个原则。

依赖是使用Maven坐标来定位的,而Maven坐标主要由GAV(groupId, artifactId, version)构成。如果两个相同的依赖包,如果groupId, artifactId, version不同,那么maven也认为这两个是不同的。
依赖会传递,A依赖了B,B依赖了C,那么A的依赖中就会出现B和C。
Maven对同一个groupId, artifactId的冲突仲裁,不是以version越大越保留,而是依赖路径越短越优先,然后进行保留。
依赖的scope会影响依赖的影响范围。
当出现了依赖的时候如何快速定位冲突原因

但出现了冲突的时候,比如系统出现了NoSuchMethodError,LinkageError 很有可能是你系统中出现了依赖冲突。出现冲突以后,可以按以下的步骤执行

1.确定出了问题的jar包名称。通常可以在eclipse中查找冲突的类有在哪些依赖包里面出现了。并确定实际要使用的是那个包,冲突的包有哪些。

2.通过mvn dependency:tree  >  tree.txt 导出全部的依赖。

3.在导出的依赖文件中,查找问题相关的jar。确定这些jar是如何被依赖进来的,是直接依赖的还是通过传递依赖引入的。

4. 找到相互冲突的并需要排除的依赖的顶级依赖,并分析冲突的原因,冲突的原因可能是以下几种:

同一个jar包但groupId, artifactId不同,这种冲突只能通过设定依赖的<exclusions> 来进行排除
需要的版本jar包依赖路径较长,这种冲突可以把想要版本的依赖直接什么在依赖中,这样路径就最短了优先级最高。
5.最后可以通过打包mvn install 来确认打出来的war包中是否有被排除的依赖。如何快速的解决Maven依赖冲突


===============


什么情况下会产生依赖冲突?
举例说明:项目中的pom.xml里声明了对project-a1.0与project-b2.0的依赖,而project-a1.0又传递依赖于project-b1.0的版本。
假设maven经过分析之后决定使用project-b1.0的依赖,也就是打包的时候把project-b1.0.jar打进了war包。
war包部署在java容器中启动之后,如果依赖project-b2.0.jar中新添的类或方法,就会发现引用的类或者方法不存在。
这种现象就是依赖冲突。

如何分析依赖冲突?
mvn dependency:tree
参考类似文章 http://ieye.iteye.com/blog/1924748
分享到:
评论

相关推荐

    解决Maven依赖冲突

    对于第二类依赖冲突,同名类存在于多个不同的依赖 jar 包当中,这种情况是 Maven 无法解决的,因为 Maven 只会为你针对同一个 Jar 包的不同版本进行仲裁,而这俩是属于不同的 Jar 包,超出了 Maven 的依赖管理范畴。...

    试试 IDEA 解决 Maven 依赖冲突的高能神器.docx

    总的来说,解决Maven依赖冲突需要理解其工作原理,结合IDEA提供的工具,如Maven Helper插件和依赖结构图,可以有效地定位和排除冲突,保持项目的稳定性和可维护性。在实际开发中,避免引入不必要的依赖和定期清理...

    maven依赖冲突插件 MavenHelper-4.26.0

    maven依赖冲突插件:idea依赖很多的时候 可以使用插件帮我们快速查看冲突的依赖 并快速的解决依赖

    idea插件一键解决maven依赖冲突

    本插件参考58开源插件MavenManager,采用dependencyManagement方式,一键解决Java开发过程中使用maven作为依赖管理时的jar包依赖冲突问题,相比MavenHelper更加省时省力,jar包版本采用最新版本号原则

    详解maven依赖冲突以及解决方法

    maven依赖冲突及解决方法 maven依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突。这种情况下,项目可能会出现无法编译或运行的错误。 依赖冲突的原因: 依赖冲突很经常是类包之间的...

    maven依赖小例子

    这大大简化了项目的构建过程,但同时也可能导致依赖冲突,需要通过排除机制或调整依赖版本来解决。 在`&lt;dependency&gt;`标签内,还可以添加`&lt;exclusions&gt;`子标签来排除特定的依赖,避免冲突。例如: ```xml ...

    ​实现maven项目中多版本依赖兼容使用解决方案

    总结来说,解决Maven依赖冲突需要深入理解Maven的依赖管理和类加载机制。在本案例中,通过修改冲突依赖的类路径,可以实现多版本依赖的共存,但这种方式并不适用于所有场景,因此在实际应用中应谨慎考虑。在可能的...

    idea中解决maven包冲突的问题(maven helper)

    在 Idea 中,解决 Maven 包冲突的问题可以使用 Maven Helper 插件,该插件可以帮助我们快速地找到问题根源。 知识点一:Maven 包冲突的问题 在日常开发中,我们经常会遇到.xxx.class 找不到的异常,但是这个类确实...

    Maven 依赖详细理解.pdf

    依赖调解是Maven解决依赖冲突的机制。当一个项目中引入了两个具有相同坐标但版本不同的依赖项时,Maven会根据一定的规则选择其中一个版本。Maven的依赖调解规则包括:短距离优先原则和声明优先原则。短距离优先原则...

    dubbo项目maven依赖

    1. **依赖版本不匹配**:Dubbo项目依赖于许多其他库,如果本地Maven仓库中的依赖版本与项目中声明的不一致,可能导致编译失败。解决方法是更新Maven的settings.xml文件,或者在pom.xml中指定特定版本。 2. **网络...

    maven 中引入依赖的包

    这在排查依赖冲突或理解项目依赖关系时非常有用。 除了Maven的默认仓库外,还可以通过`&lt;repository&gt;`标签添加自定义的远程仓库地址,这对于处理公司内部私有库或者第三方库的非中央仓库发布的情况非常关键。 在...

    MavenHelper插件 帮你检查maven的各种冲突

    这款插件专为IntelliJ IDEA设计,旨在帮助开发者轻松解决Maven依赖冲突问题,提高开发效率。 **MavenHelper插件介绍** MavenHelper是一款强大的IDEA插件,它的主要功能是分析和可视化Maven项目的依赖树,帮助开发者...

    cleanLastUpdated maven依赖冲突清理.zip

    导入maven仓库的时候总是提示jar文件导入不成功的错误,后经过分析,发现不成功的文件夹里面存在lastUpdate后缀名的文件。 用途:删除lastupdated脚本文件 注:路径需要自己用文本编辑器打开后进行修改

    Maven的依赖验证项目

    【Maven的依赖验证项目】是一个关于Maven项目管理和依赖管理的实践案例,它与CSDN博主songdeitao的一篇文章《Maven依赖管理详解》相关联。在这个项目中,我们将深入理解Maven如何处理项目的依赖关系,以及如何有效地...

    maven依赖包(用于博客项目)

    6. **版本控制**: Maven遵循严格的版本管理规则,依赖项版本冲突时,Maven会根据其依赖解析策略解决。这确保了项目的一致性和可预测性。 7. **多模块项目**: 如果博客项目包含多个子模块,如前端、后端、公共服务等...

    maven_package 依赖包(完整)

    6. **依赖冲突解决**:Maven采用"最接近原则"解决依赖冲突,即当两个或更多依赖引入相同jar的不同版本时,会选择离当前模块最近的版本。 7. **聚合与继承**:聚合(aggregation)允许一个项目包含其他项目,而继承...

    maven依赖的压缩包

    5. **解决依赖问题**:如果遇到依赖冲突,Maven遵循“最接近原则”(nearest wins)进行解决,但也可以通过调整POM中的dependencyManagement来全局控制依赖版本。 6. **使用Maven仓库**:除了中央仓库外,还可以...

    Maven中的依赖

    5. **仓库**:Maven依赖的存储库,包括本地仓库(默认在用户目录下)和远程仓库(如中央仓库mvnrepository.com)。当本地仓库没有所需依赖时,Maven会尝试从远程仓库下载。 6. **排除依赖(exclude)**:有时候我们...

    Maven类包冲突终极解决小技若干

    ### Maven 类包冲突终极解决技巧详解 在软件开发过程中,Maven 作为一款流行的构建工具,在项目管理和构建自动化方面发挥着重要作用。然而,对于新手而言,Maven 的复杂性和广泛的功能可能会让人感到困惑,尤其是在...

    关于项目、产品maven依赖问题

    然而,当多个项目或产品之间存在相互依赖时,如果不正确地管理这些依赖,可能会导致各种问题,如资源冲突和版本不一致,这正是"关于项目、产品maven依赖问题"所涉及的关键点。 1. 问题阐述: 在一个典型的多项目...

Global site tag (gtag.js) - Google Analytics