依赖冲突解决|学习笔记

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

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

 

 

 

相关文章
|
开发工具 git
SourceTree配置BeyondCompare代码冲突解决工具
SourceTree配置BeyondCompare代码冲突解决工具
1220 0
|
4月前
|
Java 中间件 测试技术
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
|
4月前
|
存储 弹性计算 Java
java依赖冲突解决问题之应用依赖过于复杂如何解决
java依赖冲突解决问题之应用依赖过于复杂如何解决
|
5月前
|
Java 应用服务中间件 API
Maven依赖冲突解决总结
Maven依赖冲突解决总结
76 0
|
7月前
|
Java Maven
【亮剑】Java项目开发中常遇到Jar 包依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起
【4月更文挑战第30天】Java项目开发中常遇到依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起。解决冲突需分析依赖树、定位冲突源、调整类加载顺序等。方法包括排除冲突依赖、统一管理版本、限定依赖范围、合并冲突类、升级降级库版本及拆分模块。关注依赖关系,及时解决冲突,保障项目稳定运行。
479 0
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s基础使用--使用k8s部署nginx服务
本文介绍了Kubernetes中核心概念Deployment、Pod与Service的基本原理及应用。Pod作为最小调度单元,用于管理容器及其共享资源;Deployment则负责控制Pod副本数量,确保其符合预期状态;Service通过标签选择器实现Pod服务的负载均衡与暴露。此外,还提供了具体操作步骤,如通过`kubectl`命令创建Deployment和Service,以及如何验证其功能。实验环境包括一台master节点和两台worker节点,均已部署k8s-1.27。
221 1
gradle依赖冲突的解决方式
gradle依赖冲突的解决方式
145 0
|
缓存 Java API
Gradle 构建工具 #5 又冲突了!如何理解依赖冲突与版本决议?
Gradle 作为官方主推的构建系统,目前已经深度应用于 Android 的多个技术体系中,例如组件化开发、产物构建、单元测试等。可见,要成为 Android 高级工程师 Gradle 是必须掌握的知识点。
237 0
Gradle 构建工具 #5 又冲突了!如何理解依赖冲突与版本决议?
|
供应链 安全 Java
安全同学讲Maven间接依赖场景的仲裁机制
去年的Log4j-core的安全问题,再次把供应链安全推向了高潮。在供应链安全的场景,蚂蚁集团在静态代码扫描平台-STC和资产威胁透视平台-哈勃这2款产品在联合合作下,优势互补,很好的解决了直接依赖和间接依赖的场景。但是由于STC是基于事前,受限于扫描效率存在遗漏的风险面,而哈勃又是基于事后,存在修复时间上的风险。基于此,笔者尝试寻找一种方式可以同时解决2款产品的短板。
安全同学讲Maven间接依赖场景的仲裁机制
|
Java fastjson 程序员
3分钟为女同事解决Maven依赖冲突,这样操作,它不香吗?
这天小林无所事事准备下班,突然听见隔壁小美在哭泣,正(hao)义(se)的小林过去关切的问 “小美,你怎么了?是不是被该死的王经理欺负了?”, 小美抽泣着点点头 “经理叫我把这个 Maven 的红色波浪线去掉,可是我一直去不掉。”