欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 【记录maven依赖规则-dependencyManagement,dependencies】

【记录maven依赖规则-dependencyManagement,dependencies】

2025/4/30 20:53:50 来源:https://blog.csdn.net/ceshiyuan001/article/details/147563502  浏览:    关键词:【记录maven依赖规则-dependencyManagement,dependencies】

记录maven依赖规则-dependencyManagement,dependencies

依赖方式

直接依赖
间接依赖

依赖关系

直接依赖:
父级管理定义的版本,并且在中进行引用了的版本。
优先使用dependencyManagement定义的版本。

间接依赖:
如果间接依赖没有指定版本,Maven 会先查看 dependencyManagement 里是否有定义。若有,就使用定义的版本;若没有,Maven 会按照自身的依赖解析规则(如路径最短原则)来确定版本。

当你自己项目的 dependencyManagement 和 Spring 的 dependencyManagement 都定义了同一个依赖的版本,且项目的 dependencies 中没有显式引入该依赖(仅通过间接依赖引入)时,Maven 确定最终使用版本的规则如下:

1. 自身项目优先原则

Maven 会优先遵循自身项目 dependencyManagement 里定义的版本。这是因为 Maven 认为项目自身的配置优先级高于外部框架(如 Spring)的配置。所以,若你在自己项目的 dependencyManagement 中定义了某个依赖的版本,那么当该依赖以间接方式被引入时,Maven 会优先使用你所定义的版本。

示例

假设你的项目结构如下:

父 POM(自己项目的父 POM)

<project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0.0</version><packaging>pom</packaging><dependencyManagement><dependencies><dependency><groupId>com.some-library</groupId><artifactId>some-library</artifactId><version>2.0.0</version></dependency></dependencies></dependencyManagement>
</project>

子项目 POM

<project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>child-project</artifactId><version>1.0.0</version><parent><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0.0</version></parent><!-- 假设引入了一个依赖,该依赖间接依赖 com.some-library --><dependencies><dependency><groupId>com.dependency</groupId><artifactId>dependency-project</artifactId><version>1.0.0</version></dependency></dependencies>
</project>

Spring 的 dependencyManagement 定义(简化示意)

<dependencyManagement><dependencies><dependency><groupId>com.some-library</groupId><artifactId>some-library</artifactId><version>1.5.0</version></dependency></dependencies>
</dependencyManagement>

在这种情况下,由于你自己项目的 dependencyManagement 定义了 com.some-library 的版本为 2.0.0,所以当 dependency-project 间接引入 com.some-library 时,Maven 会使用 2.0.0 版本。

2. 若自身项目未定义

要是你自己项目的 dependencyManagement 中没有定义该依赖的版本,Maven 才会去参考 Spring 的 dependencyManagement 里定义的版本。若 Spring 也未定义,Maven 就会按照依赖树的路径最短原则等自身的依赖解析规则来确定版本。

总结而言,Maven 会优先采用你自己项目 dependencyManagement 中定义的依赖版本,以保证项目对依赖版本有最大的控制权。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词