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 包冲突最全解决方案总结的主要内容,如果未能解决你的问题,请参考以下文章

Maven3学习总结-环境搭建

maven常用命令行总结

maven问题总结

Maven学习Maven打包生成普通jar包可运行jar包包含所有依赖的jar包

MAVEN总结,整合Eclipse以及配置私服

MAVEN总结,整合Eclipse以及配置私服