MAVEN解决版本依赖冲突

文章目录

  • 一、依赖冲突概念
    • 1、什么是依赖冲突
    • 2、依赖冲突的原因
    • 3、如何解决依赖冲突
  • 二、查看依赖冲突-maven-helper
    • 1、安装
    • 2、helper使用
      • 1、conflicts的阅读顺序(从下向上看)
      • 2、dependencies as List的阅读顺序(从下向上看)
      • 3、dependencies as Tree阅读(从上向下看)
  • 三、解决依赖冲突
    • 1、排除指定版本(常用,推荐)
      • 1、查看冲突
      • 2、排除不需要的版本
      • 3、查看pom依赖,刷新pom后
      • 4、再次点击【conflicts】,或者点击【Refresh UI】进行刷新
    • 2、使用第一声明者优先原则
    • 3、锁定版本(推荐)
    • 总结

一、依赖冲突概念

1、什么是依赖冲突

依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突,从而导致调试过程中出现类似类找不到,NoSuchMethodError等错误。
在这里插入图片描述

2、依赖冲突的原因

依赖冲突很经常是类包之间的间接依赖引起的。每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引入进来,从而造成类包冲突

3、如何解决依赖冲突

首先查看产生依赖冲突的类jar,其次找出我们不想要的依赖类jar,手工将其排除在外就可以了。

二、查看依赖冲突-maven-helper

安装了Maven Helper插件,只要打开pom文件,就可以打开该pom文件的Dependency Analyzer视图(在文件打开之后,文件下面会多出这样一个tab),进入Dependency Analyzer视图之后有三个查看选项,分别是Conflicts(冲突)、All Dependencies as List(列表形式查看所有依赖)、All Dependencies as Tree(树结构查看所有依赖)。并且这个页面还支持搜索。很方便!

1、安装

在这里插入图片描述

2、helper使用

1、当Maven Helper 插件安装成功后,打开项目中的pom文件,下面就会多出一个图
在这里插入图片描述
2、打开pom文件,并可以切换tab,简单使用
在这里插入图片描述

  • Conflicts(查看冲突)
  • All Dependencies as List(列表形式查看所有依赖)
  • All Dependencies as Tree(树形式查看所有依赖)
    当前界面上还提供搜索功能 方便使用

1、conflicts的阅读顺序(从下向上看)

从图中可以看出有哪些jar存在冲突,存在冲突的情况下最终采用了哪个依赖的版本。标红的就是冲突版本,白色的是当前的解析版本。这个选项,需要从下向上看;
并且这里是:A依赖于B,B依赖于C,C依赖D。
如下图:冲突的jar包就是jackson,swagger通过web、json最终依赖到jackson。
在这里插入图片描述

2、dependencies as List的阅读顺序(从下向上看)

dependencies as List 栏目和conflicts一样,都是从下向上看,依次依赖。
在这里插入图片描述

3、dependencies as Tree阅读(从上向下看)

datascope依赖securlty,再依赖system,再依赖core,再依赖到jackson
在这里插入图片描述

三、解决依赖冲突

1、排除指定版本(常用,推荐)

1、查看冲突

点击【Conflicts】,从图中可以看到那些jar包冲突。存在冲突的情况下最终选择了那么版本。标红的就是冲突版本,白色的是当前的解析版本。
如果有多个依赖的版本发生了冲突,那么只要把其中一个依赖给排除掉,只剩下一个依赖,那么自然就可以解决冲突的问题。我们只需要使用exclusion关键字对相关依赖进行排除就行

  • 这里可以看到 spirng-beans-4.2.4.release和spring-beans-5.0.12冲突,这里舍弃spirng-beans-4.2.4.release这个版本,保留spring-beans-5.0.12 这个版本。使用 exclusion 排除定位到的冲突包。
    在这里插入图片描述

2、排除不需要的版本

通过上边的图,我们一刻看到最终选择了【4.2.4】版本,如果我要使用【5.0.12】版本。那么只需要吧【4.2.4】给排除掉。点击【Exclude】进行排除即可。
在这里插入图片描述

3、查看pom依赖,刷新pom后

在这里插入图片描述

4、再次点击【conflicts】,或者点击【Refresh UI】进行刷新

在这里插入图片描述

2、使用第一声明者优先原则

谁先定义的就用谁的传递依赖,即在pom.xml文件自上而下,先声明的jar坐标,就先引用该jar的传递依赖。因此我们如果要使用5.2.0版本的spring core包,我们可以改成如下声明

  <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.2.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.7.RELEASE</version></dependency></dependencies>

3、锁定版本(推荐)

使用dependencyManagement 进行版本锁定,dependencyManagement可以统一管理项目的版本号。这样的话,导入依赖的时候就会直接使用我们锁定的依赖版本。确保应用的各个项目的依赖和版本一致。

(1)在父项目的pom中进行约定

<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.2.0.RELEASE</version></dependency></dependencies></dependencyManagement>

这样在后续的子工程中,就不用写版本号了,直接就沿用副项目的版本号

(2):在同一个项目pom中,既约定版本号,又导入依赖

<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.2.0.RELEASE</version></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.2.0.RELEASE</version></dependency></dependencies>

总结

综上就是maven如何排查依赖冲突以及解决方法,

  • 对于排查依赖个人比较推荐使用maven helper插件,
  • 至于解决依赖冲突个人推荐使用版本锁定的方法,此外dependencyManagement只是声明依赖,并不自动实现引入,因此子项目需要显示的声明需要用的依赖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/72046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

79.ScottPlot的MVVM实现 C#例子 WPF例子

如何通过数据绑定在 WPF 中实现动态图像显示 在 WPF 应用程序中&#xff0c;通过数据绑定实现动态图像显示是一种高效且优雅的方式。以下是一个简单的教程&#xff0c;展示如何使用 ScottPlot.WPF 库和 MVVM 模式来实现这一功能。 第一步&#xff1a;安装必要的 NuGet 包 首…

简单工厂 、工厂方法模式和抽象工厂模式

简单工厂 、工厂方法模式和抽象工厂模式 1.模式性质与定位 简单工厂:并非正式的设计模式(属编程习惯),通过单一工厂类根据参数判断创建不同产品,本质是将对象创建逻辑集中管理。 工厂方法:是标准的创建型设计模式,定义抽象创建接口,由子类决定实例化哪个具体产品类,…

热图回归(Heatmap Regression)

热图回归(Heatmap Regression)是一种常用于关键点估计任务的方法,特别是在人体姿态估计中。它的基本思想是通过生成热图来表示某个关键点在图像中出现的概率或强度。以下是热图回归的主要特点和工作原理: 主要特点 热图表示: 每个关键点对应一个热图,热图中的每个像素值…

Word 小黑第15套

对应大猫16 修改样式集 导航 -查找 第一章标题不显示 再选中文字 点击标题一 修改标题格式 格式 -段落 -换行和分页 勾选与下段同页 添加脚注 &#xff08;脚注默认位于底部 &#xff09;在脚注插入文档属性&#xff1a; -插入 -文档部件 -域 类别选择文档信息&#xff0c;域…

Java 大视界 -- Java 大数据在智能安防视频摘要与检索技术中的应用(128)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

Python里matplotlib不显示中文的问题

在很长一段时间里用Python绘图&#xff0c;matplotlib都不能很好的显示中文&#xff0c;起初是认为我的pycharm里的设置问题&#xff0c;但是发现同样的问题在spyder里也同样的出现。 一共有两种解决方案&#xff0c;我强烈推荐第一种&#xff0c;因为更为方便&#xff0c;绘图…

JavaWeb-servlet6中request和response的使用

HttpServletRequest HttpServletRequest 继承自 ServletRequest。客户端浏览器发出的请求被封装成为一个 HttpServletRequest对象。 对象包含了客户端请求信息包括请求的地址&#xff0c;请求的参数&#xff0c;提交的数据&#xff0c;上传的文件客户端的ip甚至客户端操作系统…

机器学习(吴恩达)

一, 机器学习 机器学习定义: 计算机能够在没有明确的编程情况下学习 特征: 特征是描述样本的属性或变量&#xff0c;是模型用来学习和预测的基础。如: 房屋面积, 地理位置 标签: 监督学习中需要预测的目标变量&#xff0c;是模型的输出目标。如: 房屋价格 样本: 如: {面积100㎡…

CNN的激活函数

我们来对比 Sigmoid、Softmax 和 ReLU 这三种激活函数的相同点和不同点&#xff0c;并分别说明它们相较于其他两种激活函数的优点。 相同点 都是非线性激活函数&#xff1a; 这三种激活函数都能为神经网络引入非线性特性&#xff0c;使网络能够学习复杂的模式。 广泛应用于深度…

Oracle数据恢复:闪回查询

Oracle数据恢复:闪回查询 SQL语法闪回查询:AS OF闪回版本查询:VERSIONS BETWEEN数据恢复示例闪回查询最佳实践应用场景使用限制注意事项最佳实践在误删除业务数据时,Oracle数据库通常支持以下几种数据恢复途径。 闪回查询(Flashback Query):闪回查询通过查询系统的UNDO数…

【MySQL篇】MySQL内置函数

目录 1&#xff0c;日期函数 2&#xff0c;字符串函数 3&#xff0c;数学函数 4&#xff0c;其他函数 实战OJ 1&#xff0c;日期函数 日期类型在之前文章【数据类型】中有描述 传送门&#xff1a;【MySQL篇】数据类型_mysql 数据类型-CSDN博客 函数名称描述current_dat…

苹果iOS 18.4将强制升级HomeKit架构,旧版设备或无法使用

在科技飞速发展的当下,智能家居领域也在不断革新。而苹果公司作为科技行业的巨头,其每一次动作都备受关注。近日,有消息称苹果计划在iOS 18.4版本中停止对旧版HomeKit架构的支持,这一举措意味着用户将被迫升级,也可能对众多使用Apple Home应用的智能家居设备用户产生深远影…

故障诊断——neo4j入门

文章目录 neo4jQuickStartDemo neo4j QuickStart 详情可见博客&#xff1a;https://www.cnblogs.com/nhdlb/p/18703804&#xff0c;使用docker拉取最近的一个版本进行创建 docker run -it -d -p 7474:7474 -p 7687:7687 \ -v /disk5/neo4j_docker/data:/data \ -v /disk5/ne…

《苍穹外卖》SpringBoot后端开发项目核心知识点与常见问题整理(DAY1 to DAY3)

目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功&#xff1a; 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具&#xff1a;Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…

大模型安全新范式:DeepSeek一体机内容安全卫士发布

2月以来&#xff0c;DeepSeek一体机几乎成为了政企市场AI消费的最强热点。 通过一体机的方式能够缩短大模型部署周期&#xff0c;深度结合业务场景&#xff0c;降低中小企业对于大模型的使用门槛。据不完全统计&#xff0c;已约有超过60家企业基于DeepSeek推出一体机产品。 但…

OpenHarmony-SELinux配置

前言&#xff1a; OpenHarmony 上某个进程向samgr注册SA服务&#xff0c;其他进程在与该进程进行IPC通信之前&#xff0c;需要获取该SA服务&#xff0c;SA提供方需要为该SA配置SELinux标签&#xff0c;否则该SA会被SELinux配置为u:object_r:default_service:s0标签&#xff0c…

SQL开发中改善查询性能的N种写法

文章目录 1. 使用 SELECT *2. 在 WHERE 子句中使用函数或计算3. 使用隐式类型转换4. 不使用索引的列进行连接&#xff08;JOIN&#xff09;或过滤5. 使用 OR 代替 IN6. 在子查询中使用 SELECT *7. 忽略索引统计信息8. 嵌套子查询过多9. 过度使用 DISTINCT10. 使用不当的 JOIN 类…

第十八:go 并发 goroutine

channel 可以让多个goroutine 之间实现通信 Add方法调用时机&#xff1a;必须在goroutine 启动之前调用Add方法来增加计数器的值。 如果在goroutine已经启动之后再调用Add&#xff0c;可能会导致Wait方法提前返回&#xff0c;因为计数器没有正确反映正在运行的goroutine的数量…

数字IC后端项目典型问题(2025.03.10数字后端项目问题记录)

小编发现今天广大学员发过来的问题都比较好&#xff0c;立即一顿输出分享给大家&#xff08;每天都有好多种类的数字后端问题&#xff09;。后续可能会经常通过这种方式来做分享。其实很多问题都是实际后端项目中经常遇到的典型问题。希望通过这种方式的分享能够帮助到更多需要…

课程《Deep Learning Specialization》

在coursera上&#xff0c;Deep Learning Specialization 课程内容如下图所示&#xff1a; Week2 assignment, Logistic Regression.