依赖冲突解决|学习笔记

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

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

相关文章
|
3月前
|
Java 中间件 测试技术
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
|
4月前
|
Java 应用服务中间件 API
Maven依赖冲突解决总结
Maven依赖冲突解决总结
56 0
|
6月前
|
Java Maven
【亮剑】Java项目开发中常遇到Jar 包依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起
【4月更文挑战第30天】Java项目开发中常遇到依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起。解决冲突需分析依赖树、定位冲突源、调整类加载顺序等。方法包括排除冲突依赖、统一管理版本、限定依赖范围、合并冲突类、升级降级库版本及拆分模块。关注依赖关系,及时解决冲突,保障项目稳定运行。
409 0
|
6月前
|
Java Maven
依赖版本与环境冲突问题
切换依赖版本需要刷新maven文件夹 !
59 0
gradle依赖冲突的解决方式
gradle依赖冲突的解决方式
124 0
|
Java Maven Spring
maven依赖冲突以及解决方法
maven依赖冲突以及解决方法
132 0
|
Dubbo 前端开发 Java
maven多模块和依赖冲突问题汇总记录(上)
maven多模块和依赖冲突问题汇总记录(上)
541 0
|
缓存 Java API
Gradle 构建工具 #5 又冲突了!如何理解依赖冲突与版本决议?
Gradle 作为官方主推的构建系统,目前已经深度应用于 Android 的多个技术体系中,例如组件化开发、产物构建、单元测试等。可见,要成为 Android 高级工程师 Gradle 是必须掌握的知识点。
218 0
Gradle 构建工具 #5 又冲突了!如何理解依赖冲突与版本决议?
|
分布式计算 搜索推荐 Java
Maven依赖原则及如何解决Maven依赖冲突
Maven依赖原则及如何解决Maven依赖冲突
417 0
|
Java Maven
maven的依赖原则和解析机制
maven的依赖原则和解析机制
220 0
下一篇
无影云桌面