Spring 03-如何解决依赖冲突

本文详细探讨了Maven依赖冲突的成因、解决方法,重点介绍了路径优先、exclusion排除、版本锁定等策略,推荐使用dependencyManagement进行版本管理以避免项目冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念

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

依赖冲突的范围:发生管理Jar包的框架,比如Maven和Gradle,这里以Maven为例子

依赖冲突发生的典型例子(主要原因)

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

依赖原则

1.路径不同间接依赖中maven采用的是路径最短者优先

2.路径相同间接依赖中maven 采用的是依赖定义顺序从上到下

解决依赖冲突的方案

方法1:自己主管的处理好版本关系,Maven会从上到下,优先相同jar的最前面写的版本

好处:如果需要用下面的版本,直接将前面的删掉就行

不足:需要对项目的模式十分清楚,不然删错jar包会造成各类问题 

方法2:最直接的方法就是找到冲突的jar,然后用exclusion标签将冲突,也就是不需要的jar给排除掉。

 好处:最直接有效的方式解决依赖冲突

不足:如果jar非常多,比如企业级项目,需要花大量时间写代码以及思考依赖关系。所以这个方法实用但成本高。

方法3:单独为依赖库添加 dependency 指定版本

将打包好的jar全部拆开,然后按照需要自己重新导入这些jar包

 

 比如srping-webmvc这个jar包,里面由一整套spring的mvc需要的依赖包,根据依赖关系和依赖注入的概念,我们可以将这个父jar包拆开一个一个导里面的子jar。

方法4:使用 dependencyManagement 锁定依赖库的版本号(推荐)

 

 

这种方式十分适合多模块编程,总的父项目去写所有的jar包括版面,然后通过modules标签将 子模块导入,子模块只需要导入jar名就行,而不用导入版本号,这样整个项目的jar都集中在父项目的pom文件去管理,子模块也不用担心依赖冲突,因为需要什么导什么但不管版本。

总结

依赖冲突是做项目中必须要注意的问题,否则整个项目会连运行都无法实现。个人推荐使用版本锁定的方法,dependencyManagement只是声明依赖,并不自动实现引入,因此子项目需要显示的声明需要用的依赖。

在提供的引用中,没有明确提到关于"spring-cloud-starter-alibaba-nacos-discovery"的依赖冲突的信息。引用引用提到了关于该依赖的Maven依赖信息文件和翻译后的API文档,但没有提及冲突问题。引用提供了一个添加配置的示例,但没有提及具体的依赖冲突。因此,没有足够的信息来回答关于"spring-cloud-starter-alibaba-nacos-discovery"依赖的冲突问题。如果您遇到了依赖冲突的问题,建议您检查您的项目配置和依赖版本,可能需要更新或调整相关的依赖项以解决冲突。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [spring-cloud-starter-alibaba-nacos-discovery-2021.1-文档-中英对照版.zip](https://download.csdn.net/download/qq_36462452/85274677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [spring-cloud-starter-alibaba-nacos-discovery-2021.1-文档-中文版.zip](https://download.csdn.net/download/qq_36462452/85331688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [springcloud alibaba](https://blog.csdn.net/xidianzxm/article/details/106067773)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值