依赖冲突解决|学习笔记

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

开发者学堂课程【项目管理工具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就可以了。

相关文章
|
Python
pdf文件合并批量合并,转Word--python一招教会你
pdf文件合并批量合并,转Word--python一招教会你
332 0
|
11月前
|
弹性计算 Ubuntu Linux
阿里云系统运维管理OOS一键安装宝塔面板,这个功能太牛了!
宝塔面板是实用的服务器管理工具,支持多种操作系统(如Ubuntu、CentOS等)。通过阿里云OOS可一键安装。安装前提包括ECS实例运行中且有公网,安全组需开放8888端口。安装步骤简单,进入ECS控制台选择预装应用并确认下单,完成后在控制台查看详情和登录信息。最后验证安装结果,确保能成功访问宝塔面板URL。
547 82
|
8月前
|
存储 人工智能 API
离线VS强制登录?Apipost与Apifox的API工具理念差异深度解析
在代码开发中,工具是助手还是枷锁?本文通过对比Apipost和Apifox在断网环境下的表现,探讨API工具的选择对开发自由度的影响。Apifox强制登录限制了离线使用,而Apipost支持游客模式与本地存储,尊重开发者数据主权。文章从登录策略、离线能力、协作模式等方面深入分析,揭示工具背后的设计理念与行业趋势,帮助开发者明智选择,掌握数据控制权并提升工作效率。
|
10月前
|
人工智能 自然语言处理 IDE
通义灵码使用体验
通义灵码2.0是阿里云推出的AI编码助手升级版,安装简便且兼容主流IDE。其行级和函数级实时续写功能准确,大幅减少编码时间。特色自然语言生成代码、单元测试及注释生成功能实用,提升代码质量和维护性。智能问答和异常排查功能出色,显著提高编程效率与代码稳定性,值得推荐。
460 0
|
网络安全
如何选购便宜的高防服务器? - 蓝易云
以上这些步骤可以帮助你选购到便宜的高防服务器。
491 0
|
自然语言处理 算法 物联网
【技术前沿】智能反向寻车解决方案:提升停车场用户体验与运营效率
本文介绍了一种智能反向寻车解决方案,通过集成物联网(IoT)、大数据分析及用户友好的移动应用,利用蓝牙信标或RFID标签实现车辆厘米级定位。车主仅需输入车牌号或停车位编号,即可获得最佳寻车路径。该方案不仅大幅缩短寻车时间,还提升了停车场运营效率。以合肥骆岗公园为例,应用后车主平均寻车时间从10分钟缩短至2分钟内,用户满意度显著提高。
643 1
【技术前沿】智能反向寻车解决方案:提升停车场用户体验与运营效率
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
2639 3
|
存储 自然语言处理 前端开发
Web1.0、Web2.0 和 Web3.0 的区别
【7月更文挑战第4天】Web1.0是只读的互联网,内容由网站所有者发布,用户被动接收;Web2.0强调用户生成内容和社交互动,如博客、社交媒体,用户能积极参与;而Web3.0则走向去中心化,基于区块链,强调语义网、数字资产、用户隐私和数据主权,赋予用户更多控制权。从单向传播到深度互动,再到去中心化和智能服务,互联网不断演进。
2538 6
|
JavaScript 编译器 API
MATLAB实战 | S函数的设计与应用
S函数用于开发新的Simulink通用功能模块,是一种对模块库进行扩展的工具。S函数可以采用MATLAB语言、C、C++、FORTRAN、Ada等语言编写。在S函数中使用文本方式输入公式、方程,非常适合复杂动态系统的数学描述,并且在仿真过程中可以对仿真进行更精确的控制。
458 0
MATLAB实战 | S函数的设计与应用