文章目录
- 子POM与父POM
- 一、继承的内容
- 1.子 POM 可以继承父 POM 的内容
- 2.子 POM 中声明相同配置
- 覆盖规则示例
子POM与父POM
一、继承的内容
在 Maven 项目结构中,子 POM(子模块)可以继承父 POM 的很多配置。合理使用继承机制可以大大减少重复配置,让项目更清晰、易维护。
1.子 POM 可以继承父 POM 的内容
继承项 | 说明 |
---|---|
dependencyManagement | 父 POM 统一管理依赖版本,子 POM 只需声明依赖,不用写版本号。 |
pluginManagement | 父 POM 统一管理插件版本,子 POM 引用时可省略版本号。 |
build 配置 | 包括编译器配置、打包方式(jar/war)、资源处理等。 |
properties | 父 POM 定义的属性(如 java.version ),子 POM 可直接引用。 |
repositories | Maven 仓库地址继承,无需每个子 POM重复配置。 |
pluginRepositories | 插件仓库地址继承。 |
dependencies | 父 POM直接声明的依赖,子 POM默认继承。 |
build.plugins | 父 POM 配置的插件,子 POM默认继承。 |
reporting | 站点生成(如 Maven Site Plugin)相关配置。 |
distributionManagement | 发布地址、仓库配置继承。 |
注意:
modules
列表是父 POM 聚合子模块的,不属于继承范畴,是聚合关系。
2.子 POM 中声明相同配置
如果子 POM 中声明了已经从父 POM 继承的内容,会优先使用子 POM自己的配置,覆盖父 POM 的设置。
覆盖规则示例
1.依赖覆盖
<!-- 父 POM中 -->
<dependencyManagement><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.6.4</version></dependency>
</dependencyManagement><!-- 子 POM中 -->
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.7.0</version> <!-- 子POM显式指定版本,覆盖父POM --></dependency>
</dependencies>
- 打包方式覆盖
<!-- 父 POM中 -->
<packaging>jar</packaging><!-- 子 POM中 -->
<packaging>war</packaging> <!-- 子POM重新定义,最终是war包 -->
3.插件配置覆盖
<!-- 父 POM中 -->
<build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins>
</build><!-- 子 POM中 -->
<build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17</target></configuration></plugin></plugins>
</build>