Maven学习总结(59)—— Maven Jar 包冲突最全解决方案总结
Posted 科技D人生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven学习总结(59)—— Maven Jar 包冲突最全解决方案总结相关的知识,希望对你有一定的参考价值。
前言
在实际开发中,多模块项目常会使用 Maven 进行包管理。在 poml 文件中进行包依赖时,常存在引入一个 jar 包中默认依赖了其他的 jar 包的情况。这样很容易导致 jar 包冲突,从而产生一些诡异问题,如版本问题导致的类、方法找不到等。下面我们将聊聊具体关于依赖冲突产生的原因、排查方式以及解决的方案。
- 依赖传递的概念:举个简单例子,比如一个多模块项目依赖关系如下图。其中 bepe-dal 引入了 common-lib,当 bepe-manager 模块中引入 bepe-dal 时,common-lib 这个依赖也会被引入到 bepe-manager 模块中,这个就是依赖传递。
- 依赖冲突的概念:依赖冲突指当模块中引入很多 jar 包时,如果其中存在着 groupId 和 artifactId 一样,但是 version 不一样的两个 jar 包,这就是依赖冲突。那么在应用时会选用哪一个 version 呢?这就是我们接下来要讨论的冲突解决方式。
依赖冲突该是怎么解决的?
- 最短路径原则
- 声明优先原则
- 依赖排除
最短路径原则
当存在 groupId 和 artifactId 一致但是 version 不一致的 jar 包冲突时,模块会自动选择距离自己路径短的包。如:bepe-manager 到 common-lib (1.0) 的距离为 2,bepe-manager 到common-lib (2.0) 的距离为 1,就会选择距离短的 common-lib(2.0),这就是最短路径原则。
以上是关于Maven学习总结(59)—— Maven Jar 包冲突最全解决方案总结的主要内容,如果未能解决你的问题,请参考以下文章