如何实现Maven父POM中依赖版本的自动继承省略
问题
在创建Maven项目时,若选择继承如下Spring Boot父POM:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.2</version> </parent>
对于所有已在父POM中声明的依赖,子POM无需指定版本即可使用,这能避免同一库出现多版本问题,非常实用。
我自己搭建了项目的父POM,但子POM继承后仍需为每个依赖指定版本(即使父POM已声明),导致每次更新依赖版本都要修改多处。目前我在子POM中只能这样写:
<dependency> <groupId>br.com.fisgar</groupId> <artifactId>fisgar-model</artifactId> <version>${project.version}</version> </dependency>
我希望能像Spring Boot父POM那样,完全省略子POM中的依赖版本,请问该如何实现?
解决方法
核心原因是Spring Boot父POM通过<dependencyManagement>节点统一管理依赖版本,而非直接在<dependencies>中声明依赖。你需要在自己的父POM中做同样配置:
在父POM中添加
<dependencyManagement>节点
在父POM的<project>标签下新增该节点,把需要统一管控版本的依赖声明在这里,仅指定版本号,不实际引入依赖:<dependencyManagement> <dependencies> <!-- 管理自定义依赖的统一版本 --> <dependency> <groupId>br.com.fisgar</groupId> <artifactId>fisgar-model</artifactId> <version>1.0.0</version> <!-- 此处指定全局统一版本 --> </dependency> <!-- 可添加更多需要统一管理的依赖 --> </dependencies> </dependencyManagement>注意:
<dependencyManagement>仅负责版本管控,不会自动将依赖引入子项目,子项目仍需显式声明依赖,但无需写版本。子POM中省略版本声明
父POM配置完成后,子POM只需声明依赖的groupId和artifactId,版本会自动继承父POM的配置:<dependency> <groupId>br.com.fisgar</groupId> <artifactId>fisgar-model</artifactId> <!-- 无需写version,自动使用父POM中dependencyManagement定义的版本 --> </dependency>版本统一更新
后续需要更新版本时,仅需修改父POM中<dependencyManagement>对应依赖的version值,所有子项目会自动同步使用新版本,无需逐个修改子POM。
内容的提问来源于stack exchange,提问作者Rafael Lima
相关产品推荐
相关产品推荐

