`

如何快速的解决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
分享到:
评论

相关推荐

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

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

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

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

    maven依赖冲突插件 MavenHelper-4.26.0

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

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

    主要介绍了maven依赖冲突以及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    cleanLastUpdated maven依赖冲突清理.zip

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

    MavenRunHelper maven解决依赖冲突插件

    MavenRunHelper插件的作用是帮助用户更轻松地在InteliJ IDEA中运行maven项目,它可以自动配置Maven运行环境,并且可以自动识别 maven项目的依赖关系,从而节省时间和精力。

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

    既能不升级jar包又能使用高版本依赖同时还不造成冲突的完美解决方案

    多种方法解决Maven Jar包冲突引入后报错问题.docx

    Maven的Jar包冲突问题,经常出现的场景为: 本地运行报NoSuchMethodError,ClassNotFoundException。明明在依赖里有这个Jar包啊。...定位冲突以及解决Jar包冲突的几个简单技巧 如何写一个干净依赖关系的POM文件

    MAVEN构建的工程无法发布lib到tomcat的解决方

    Maven构建项目发布到Tomcat的解决...Maven构建项目发布到Tomcat服务器可能会遇到一些困难,但是通过正确地配置Maven依赖项、部署Maven依赖项到Tomcat服务器、检查Tomcat服务器的配置和类加载器配置,可以解决这些问题。

    maven冲突jar包清理脚本

    构建maven工程时pom.xml中引入依赖时有红色字体,setting处理了,也将jar包的版本号都试了一遍,还是没解决,后来请教大牛,原来是没连网,maven工程加载了一部分jar包,连网之后自动下载的jar包跟之前的冲突,用这...

    MavenHelper.zip

    好用的idea编辑器Maven插件,用于快速查找依赖冲突,解决依赖冲突问题。

    MavenHelper

    好用的idea编辑器Maven插件,用于快速查找依赖冲突,解决依赖冲突问题。

    MavenRunHelper 各版本集合

    使用maven管理依赖包时会遇到依赖冲突的问题,解决起来非常麻烦。MavenRunHelper插件作为解决冲突的利器,能够高效率的展示出冲突列表,快速解决冲突问题。由于网络等问题,常常无法下载插件。现提供IntelliI IDEA ...

    maven 隐式依赖引起的包冲突解决办法

    主要介绍了maven 隐式依赖引起的包冲突解决办法的相关资料,需要的朋友可以参考下

    mabel:Bazel的Maven依赖图生成器

    产品特点从给定的Maven依赖关系列表中解决所有依赖关系,并管理版本冲突-确保依赖关系图中每个工件只有一个版本可用。 为所有远程工件生成存储库规则。 生成所需的Java规则(具有传递依赖项)。 自动检测要为给定...

    easyExcel解决poi冲突更改内使用路劲.rar

    由于现在版本需要使用poi3.17以上版本,对项目本身有poi3.16的很不友好,jar包冲突,通过修改jar包路径达到目的,解决jar包冲突

    IDEA+Maven导入新包JDK版本冲突问题

    引入新的依赖包代码报-JDK版本冲突!解决

    MavenRunHelper.zip

    maven helper插件,方便管理依赖,快速解决冲突

    Windows下配置好的apache-maven-3.6.1

    4、改进了依赖冲突解决机制:Maven 3.6 通过改进依赖冲突解决机制,可以更好地处理项目中的依赖关系,并自动解决冲突。 5、支持 JDK 11+:Maven 3.6 支持最新的 Java 版本,包括 JDK 11 及以上版本。这意味着您可以...

Global site tag (gtag.js) - Google Analytics