如何在不移除父POM的情况下,让子模块采用指定的spring-beans版本?
解决方法
有几种可行的方式实现子模块xxx使用spring-beans 5.3.27版本,同时保留父POM:
方法一:在子模块xxx的依赖中直接指定版本
直接在xxx模块的pom.xml的<dependencies>里声明spring-beans时明确写出版本号,这个指定的版本会覆盖从父POM继承来的版本:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.3.27</version> </dependency> <!-- 其他依赖继续保留 --> </dependencies>
方法二:在当前项目(包含modules的父级子项目)的dependencyManagement中统一覆盖版本
如果希望所有子模块都切换到5.3.27版本,或者想在当前项目层级统一管理这个版本,可以在当前项目的<dependencyManagement>里直接声明spring-beans的版本,这个声明会覆盖父POM中的对应版本:
<dependencyManagement> <dependencies> <!-- 保留原有的spring-dependencies导入配置 --> <dependency> <groupId>com.xyz.abc</groupId> <artifactId>spring-dependencies</artifactId> <version>1.0.0</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 添加该声明覆盖父POM的spring-beans版本 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.3.27</version> </dependency> </dependencies> </dependencyManagement>
方法三:仅在子模块xxx的dependencyManagement中单独指定版本
如果只想让xxx模块使用5.3.27版本,其他子模块保持父POM的版本,可以在xxx模块的<dependencyManagement>里添加版本声明:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.3.27</version> </dependency> </dependencies> </dependencyManagement> <!-- 之后在dependencies中正常引入,无需再写版本号 --> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> </dependencies>
核心原理
Maven依赖管理的优先级规则:
- 子模块中直接指定的依赖版本优先级最高
- 子模块的
dependencyManagement声明会覆盖从父级继承的声明 - 当前项目的
dependencyManagement声明会覆盖父POM中的对应声明
通过这些规则,就能在不移除父POM的前提下,让xxx模块使用指定的5.3.27版本。
内容的提问来源于stack exchange,提问作者Dhyey Vachhani
相关产品推荐
相关产品推荐

