模块继承
Maven 的 继承是通过 <parent> 标签来实现的。子模块(子项目)继承父 POM 的 配置、依赖管理、插件管理 等,而不一定在文件系统中是父子目录关系(虽然通常会这样做)。
声明父pom
- 子模块:
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>maven-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>service</artifactId>
<dependencies>
<!-- spring-boot-starter-web 版本由父 POM 管理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>没有relativePath标签等同<relativePath>../pom.xml</relativePath>, 即默认从当前pom文件的上一级目录找
继承的属性
子模块不需要再写版本号、插件配置或公共属性,继承父 POM 的管理能力。
xml
<project>
<!--<groupId>com.example</groupId>-->
<artifactId>project-root</artifactId>
<!--<version>1.0.0</version>-->
</project>| 类型 | 说明 |
|---|---|
| groupId / version / packaging | 父 POM 的 groupId、version、packaging 默认继承,子模块可以覆盖 artifactId |
| properties | 所有 <properties> 都会被子模块继承,用于统一版本、路径、配置 |
| dependencyManagement | 管理依赖版本,子模块声明依赖可不写版本号 |
| dependencies | 父 POM 的 <dependencies> 也会被子模块继承(不建议用,推荐用 dependencyManagement) |
| build / pluginManagement | 父 POM 中插件版本、配置可继承,子模块可直接使用或覆盖 |
| repositories / pluginRepositories | 父 POM 配置的仓库地址、插件仓库可继承 |
| profiles | 父 POM 的 <profiles> 可以被子模块继承 |
| reporting | 报告插件配置可继承 |
子模块可以覆盖父 POM 的属性或插件配置:
xml
<properties>
<java.version>11</java.version> <!-- 覆盖父 POM 的 17 -->
</properties>