如何定位、解决maven依赖冲突问题

这篇具有很好参考价值的文章主要介绍了如何定位、解决maven依赖冲突问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.依赖冲突的原因

2.复现一个依赖冲突场景

3.如何定位依赖冲突

3.1.maven show dependencies

3.2.maven helper

4.依赖路径最短优先原则


1.依赖冲突的原因

如果maven项目中,A依赖于B和C,B依赖于1.0版本的D,C依赖于2.0版本的D,这时候就会出现依赖冲突。

如何定位、解决maven依赖冲突问题,算法,linux,前端,原力计划 

在A上加载使用D依赖的时候,maven会根据依赖路径最短优先原则,加载一个D依赖,另一个是不会被使用的。

在大多数时候,依赖冲突可能并不会对系统造成什么异常,但是,在某些特定的情况下会导致系统报错,比如,版本的变化导致API不同,或者删除了类,而正好又使用到有所变化的API或者被删除的类,那么就会导致系统报错。

2.复现一个依赖冲突场景

为了后文讲解怎么定位依赖冲突,这里我们先复现一个依赖冲突场景。

三个module:

  • orderService

  • productService

  • platformService

依赖关系如下:

如何定位、解决maven依赖冲突问题,算法,linux,前端,原力计划

orderService依赖:

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>3.8.1</version>
</dependency>

productService依赖:

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>3.9</version>
</dependency>

platform的依赖:

<dependency>
   <groupId>org.example</groupId>
   <artifactId>orderService</artifactId>
   <version>1.0-SNAPSHOT</version>
</dependency>
​
<dependency>
     <groupId>org.example</groupId>
     <artifactId>productService</artifactId>
     <version>1.0-SNAPSHOT</version>
</dependency>

3.如何定位依赖冲突

3.1.maven show dependencies

IDEA中自带一个功能,maven show dependencies,右击pom文件可以调出,或者右上角的快捷键也可以调出

如何定位、解决maven依赖冲突问题,算法,linux,前端,原力计划

maven show dependencies,会为我们显示一棵maven的依赖树:

蓝色箭头是正常的依赖关系,红色箭头是依赖冲突关系。

如何定位、解决maven依赖冲突问题,算法,linux,前端,原力计划

如果依赖太多,ctrl+F可以弹出依赖列表,在其中可以选择想定位到的依赖:

如何定位、解决maven依赖冲突问题,算法,linux,前端,原力计划

很遗憾的是maven show dependencies这种方式的场景实在是有限,正常的稍微上一点体量的项目,依赖树都会很大,用这种方式会把人看傻。

这里我随便拿一个博主经历过的项目上的依赖树拿出来,是长这样的:

如何定位、解决maven依赖冲突问题,算法,linux,前端,原力计划

这种依赖树,根本就没办法去看,就算定位到了,依赖路径的线条你都找不清楚。所以就没有办法了吗?当然是有的,这就是IDEA的一款插件,我们的maven依赖冲突分析利器——maven helper。

3.2.maven helper

首先是下载安装,一定要看准,别装错了,如果IDEA中没办法安装的话直接去官网上下载,然后走本地离线安装即可。

博主,这里已经提前安装好了,第一次安装的话,安装完重启一下IDEA才会生效。

如何定位、解决maven依赖冲突问题,算法,linux,前端,原力计划

安装完maven helper后,pom.xml文件的左下角会有一个dependency的选项,点击这个选项可以进入maven helper:

如何定位、解决maven依赖冲突问题,算法,linux,前端,原力计划

 

all dependencies选项,会展示当前项目的依赖树:

这种目录层级的依赖树,在依赖量大的情况下,比起图形来就要友善很多,其中会用红色标出被冲突掉的依赖,也就是不会被用到的依赖。

如何定位、解决maven依赖冲突问题,算法,linux,前端,原力计划

conflicts选项,可以根据依赖名来进行依赖的搜索,搜索结果会展示生效的依赖版本,点击会显示项目中该依赖的所有版本,会用红色标出被冲突掉,不生效的版本:

如何定位、解决maven依赖冲突问题,算法,linux,前端,原力计划

maven helper中右键依赖,可以排除依赖:

如何定位、解决maven依赖冲突问题,算法,linux,前端,原力计划

它会直接用exclusions来排除依赖:

<dependencies>
    <dependency>
        <groupId>org.example</groupId>
        <artifactId>orderService</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>org.example</groupId>
        <artifactId>productService</artifactId>
        <version>1.0-SNAPSHOT</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-lang3</artifactId>
                <groupId>org.apache.commons</groupId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

4.依赖路径最短优先原则

这里扩展聊一聊依赖路径最短优先原则。

依赖路径最短优先原则是一种解决依赖冲突的策略,它指定当存在多个冲突的依赖版本时,选择依赖路径最短(即嵌套层级最浅)的版本作为解决方案。这个原则通常被用于 Maven 等构建工具中,以确定在依赖关系中应该使用哪个版本的库。

以下是一个示例,说明依赖路径最短优先原则如何工作:

假设有以下依赖关系:

  • 应用程序 A 依赖于库 B(版本 1.0)和库 C(版本 1.0)。

  • 库 B 依赖于库 C(版本 2.0)。

根据依赖路径最短优先原则,解决冲突的方式是选择最短路径上的依赖版本。在这个例子中,库 B 的依赖路径最短,因此会选择库 C 的版本 1.0 作为解决方案。这样,库 C(版本 2.0)不会被选择,因为它的路径比较长。

这个原则的目的是最小化潜在的依赖冲突问题,因为通常情况下,更短的路径意味着更直接的依赖关系,可能更容易避免冲突。文章来源地址https://www.toymoban.com/news/detail-693054.html

到了这里,关于如何定位、解决maven依赖冲突问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何定位不需要的Jar依赖 loosejar工具和maven工具实践分析

    在很多的项目中,往往都存在一些冗余的JAR包依赖,可能是某次的测试加入但是之后没有删除,可能是引用传递的依赖,也可能是历史代码但在后面升级后已经有其他的替换方案了,可没有剔除原先的依赖等等情况。想要更好的提升构建速度以及减少依赖存在漏洞的可能性,

    2024年02月15日
    浏览(243)
  • 【Maven】006-Maven 依赖传递和依赖冲突

    概念: Maven 依赖传递是指当一个项目依赖于另一个项目或库时,Maven 会 自动解析和获取 这些依赖,确保项目能够顺利构建和运行。 依赖传递包括 直接依赖和间接依赖 。直接依赖是项目 直接引用 的库,而间接依赖是 直接依赖所引用的其他库 。 作用: 简化项目管理 :Ma

    2024年02月02日
    浏览(35)
  • maven依赖管理(依赖配置、依赖传递、依赖冲突、依赖范围)

    这篇文章会介绍在maven中的依赖配置、依赖传递、依赖范围等知识点。 依赖配置很好理解,就是指当前项目需要什么jar,就在dependencies中进行配置 在maven管理jar的时候,冲突是肯定存在的,这里就来介绍一下在maven中对于jar的一些管理是如何进行的,遵循什么规则。 简单说就

    2024年02月11日
    浏览(25)
  • Maven第八章:如何解决Maven的jar版本冲突

    前言 本文重点讲解Maven依赖冲突原因,maven依赖原则以及如何利用idea Maven Helper插件分析解决问题。 背景 开发过程中引入第三方jar遇到依赖冲突的,非常影响开发,甚至大部分时间都在调试版本兼容。

    2024年02月06日
    浏览(32)
  • Maven 基础之依赖管理、范围、传递、冲突

    坐标和 mvnrepository 网站 在 maven 中通过『 坐标 』概念来确定一个唯一确定的 jar 包。坐标的组成部分有: 元素 说明 groupId 定义当前 Maven 组织名称 artifactId 定义实际项目名称 version 定义当前项目的当前版本 [✔] 注意 任意两个不同包,它们的这三个属性必定至少有一项是不同

    2024年02月12日
    浏览(31)
  • Maven 依赖传递和冲突、继承和聚合

    1.1.1 概念         假如有三个 Maven 项目 A 、 B 和 C ,其中项目 A  依赖 B ,项目 B  依赖 C 。那么我们可以说 A 依赖 C 。也就是说,依赖的关系为: A—B—C , 那么我们执行项目 A 时,会自动把 B 和 C 都下载导入到 A 项目的 jar 包文件夹中,这就是依赖的传递性。 1.1.2 作

    2024年01月21日
    浏览(34)
  • 解决idea无法导入maven依赖的问题

    如果你的maven版本正常,没有和idea版本不兼容,你的settings配置文件,maven仓库,pom文件都正常运行,也能将maven依赖下载至本地maven仓库,但idea中就是导入不了相关依赖 如图,项目除了jdk之外没能导入进任何的依赖  那么有可能是你的项目依赖较多容量较大,而idea默认设置

    2024年02月10日
    浏览(28)
  • 解决IDEA Maven依赖下载失败、Maven依赖包导入失败报红的问题(项目实操)

    在向IDEA导入一个maven项目的时候,有一些依赖就是无法下载下来,我想尽了办法,查尽了资料,还是无法解决,最后通过我的一个突发奇想解决了问题。 一、我的pom文件报红的依赖,在maven仓库官网上都可以搜索到,但是无论想什么办法,IDEA就是下载不下来依赖 二、首先列

    2024年02月16日
    浏览(32)
  • 解决IDEA中maven依赖报红的问题

    在使用IDEA进行编程时,发现maven依赖中有很多报红现象,如下图所示: 虽然不太影响项目运行,但也确实是个问题 原因:造成这种现象主要原因就是 由于网络原因导致没有将Maven的依赖下载完整 ,就出现很多以 .lastUpdated 结尾的文件 删除maven仓库所有以.lastUpdate结尾的文件,

    2024年02月11日
    浏览(40)
  • 解决Maven依赖下载问题:从阿里云公共仓库入手

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础

    2024年02月09日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包