依赖冲突解决|学习笔记

简介: 快速学习依赖冲突解决

开发者学堂课程【项目管理工具Maven学习:依赖冲突解决】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/23


依赖冲突与解决


什么是依赖冲突

依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突

依赖冲突的原因

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

如何解决依赖冲突

首先查看产生依赖冲突的类jar,其次找出我们不想要的依赖类jar,手工将其排除在外就可以了。具体执行步骤如下:

1、查看依赖冲突

2、解决冲突

3、锁定版本

1、初始化失败是由于反射生成这个Javassist引起的,想要解决这个问题首先需要去改变user-dao下的build path

image.png

需要先把1.5的包删掉,再把它改成1.7在进行测试image.png

发现在运行系统中没有javassist这个包,那现在就需要把javassit配置到运行系统当中去,需要去找一下版本

image.png

把这个javassit配置到运行系统当中去,此刻显示运行成功了。

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

二、依赖范围

首先需要知道,Maven在编译项目主代码的时候需要使用一套classpath。比如:编译项目代码的时候需要用到spring-core,该文件以依赖的方式被引入到classpath 中。其次,Maven 在执行测试的时候会使用另外一套classpath。如:junito

最后在实际运行项目时,又会使用一套classpath,spring-core需要在该classpath中,而junit不需要。

所以依赖范围就是用来控制依赖与这三种classpath(编译classpath,测试classpath,运行时classpath)的关系,Maven有以下几种依赖范围:

1.Compile编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译,测试,运行都有效。

2.Test:测试依赖范围。只在测试的时候需要。比如junit

3.Provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试有效,但在运行时无效。典型的例子是servet-API,编译和测试项目的需要,但在运行项目时,由于容器已经提供,就不需要Maven重复地引入一遍。

4.Runtime:运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行有效,但在编译代码时无效。典型的例子是:jdbe驱动程序,项目主代码的编译只需要jdk提供的idbe接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体jdbc驱动。

5.System:系统依赖范围。一般不使用。

三、传递性依赖

传递依赖机制,让我们在使用某个a的时候就不用去考虚它依赖了什么。也不用担心引入多余的依赖。Maven 会解析各个直接依赖的POM,将那些心要的间接依赖,以传递性依赖的形式引)到当前项目中。

注意:传递依赖有可能产生冲突!!

冲突场景1:A--》B---》C(1.0)

A--》E--》C(2.0)

如果A下同时存在两个不同version的c,冲突!!

解决方法:第一声明者优先

image.png

四、排除依赖

image.png

在想排除一个范围的时候需要写groupID和artifactID就可以了。

相关文章
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
1181 152
|
中间件 Nacos 数据安全/隐私保护
Nacos下载与安装配置(2.3.0版本示例)
本文介绍微服务中间件 nacos的下载与安装以及配置
Nacos下载与安装配置(2.3.0版本示例)
|
缓存 NoSQL 关系型数据库
(八)漫谈分布式之缓存篇:唠唠老生常谈的MySQL与Redis数据一致性问题!
本文来聊一个跟实际工作挂钩的老生常谈的问题:分布式系统中的缓存一致性。
711 11
|
存储 前端开发 Java
深入解析Java类加载机制:原理、过程与实践
深入解析Java类加载机制:原理、过程与实践
497 2
|
编解码 缓存 前端开发
【专栏:HTML与CSS移动端开发篇】移动端网页布局与适配
【4月更文挑战第30天】本文探讨了如何使用HTML和CSS优化移动端网页布局与适配,强调响应式设计、灵活布局和媒体查询的重要性。针对移动设备的屏幕尺寸、操作方式、网络速度和性能差异,提出了断点选择、触摸优化、图像和性能优化等最佳实践。测试和调试、框架工具的应用也是关键步骤,以确保在多设备上提供优秀用户体验。开发者需持续学习新趋势和工具,以适应移动端发展。
651 2
【类加载机制深度解析】,附带学习经验
【类加载机制深度解析】,附带学习经验
|
XML JavaScript 前端开发
XML DOM 节点信息
XML DOM用于处理节点信息,包括nodeName(节点名)、nodeValue(节点值)和nodeType(节点类型)。示例展示了如何使用这些属性加载XML文件、获取元素节点名称、提取及修改文本内容。节点有三种关键属性:nodeName表示节点名,nodeValue获取或设置节点值,nodeType指示节点类型,如元素(1)、属性(2)、文本(3)、注释(8)和文档(9)。
|
机器学习/深度学习 人工智能 TensorFlow
生成完美口型同步的 AI 数字人视频
在当今数字媒体和人工智能技术的推动下,生成完美口型同步的AI数字人视频成为备受关注的研究领域。本研究旨在开发一种技术,能够实现生成完美口型同步的AI数字人视频,使虚拟人物的口型与语音内容完美匹配。采用了深度学习方法,结合了语音识别、面部运动生成和视频合成技术,以实现这一目标。通过语音识别模型将输入的文本转换为音频波形,利用面部运动生成模型根据音频波形生成对应的面部动作序列,这些动作序列可以准确地反映出发音的口型和面部表情,最后生成口型同步的AI数字人视频。这项技术具有广泛的应用前景,可用于虚拟主持人、教育视频、学习平台等领域,提升视频内容的真实感和沟通效果。
1428 0
|
弹性计算 容灾 网络协议
一文详解云上跨可用区容灾解决方案和异地多活能力建设最佳案例
阿里云弹性计算团队十三位产品专家和技术专家共同分享云上运维深度实践,详细阐述如何利用CloudOps工具实现运维提效、弹性降本。
1413 0
|
消息中间件 存储 监控
消息队列进阶-3.消息队列常见问题解决方案
消息队列进阶-3.消息队列常见问题解决方案
367 0

热门文章

最新文章