文章目录
子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.依赖覆盖
xml
<!-- 父 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>
- 打包方式覆盖
xml
<!-- 父 POM中 -->
<packaging>jar</packaging>
<!-- 子 POM中 -->
<packaging>war</packaging> <!-- 子POM重新定义,最终是war包 -->
3.插件配置覆盖
xml
<!-- 父 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>