Parent
Maven Parent POM
什么是 Parent POM
Parent POM (Parent Project Object Model) 是 Maven 中一种特殊的 POM 文件,用于在多模块项目中共享配置。它允许我们将通用的配置、插件、依赖管理等信息集中定义在一个地方,然后被子模块继承,从而实现配置的复用和统一管理。
为什么需要 Parent POM
在复杂的多模块项目中,通常会面临以下挑战:
- 配置重复:各个子模块需要配置相同的编译选项、插件、依赖等
- 版本不一致:不同模块可能使用不同的插件版本或 Java 版本
- 维护困难:当需要修改公共配置时,需要逐一修改每个模块
- 缺乏一致性:各模块可能采用不同的构建标准和规范
Parent POM 解决了这些问题:
- 集中管理通用配置,避免重复
- 统一项目构建标准和规范
- 简化子模块的 POM 文件
- 便于维护和升级
Parent POM 的作用
Parent POM 主要提供以下功能:
1. 属性定义 (Properties)
集中定义项目中使用的各种属性,如版本号、编码格式等:
xml
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>2. 依赖管理 (Dependency Management)
通过 <dependencyManagement> 统一管理依赖版本:
xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>3. 插件管理 (Plugin Management)
通过 <pluginManagement> 统一管理插件版本和配置:
xml
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>4. 资源配置
统一定义资源过滤和包含规则。
如何使用 Parent POM
1. 创建 Parent POM
创建一个 packaging 为 pom 的项目:
xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<!-- 公共配置 -->
</project>2. 在子模块中继承 Parent POM
在子模块的 pom.xml 中添加 parent 元素:
xml
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>my-parent</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>my-child-module</artifactId>
<!-- 子模块特有配置 -->
</project>Parent POM 最佳实践
1. 合理组织结构
- 将共同配置放在 Parent POM 中
- 子模块只保留特有的配置
- 避免过度继承导致的复杂性
2. 版本管理
- 使用属性统一管理版本号
- 定期更新和维护依赖版本
- 确保版本兼容性
3. 插件配置
- 在 Parent POM 中预配置常用插件
- 为不同类型的项目提供不同的插件集
- 保持插件配置的合理性
4. 多层级继承
对于大型项目,可以使用多层级 Parent POM:
root-parent (最基础配置)
├── java-parent (Java 项目通用配置)
│ ├── spring-parent (Spring 项目配置)
│ └── ...
└── web-parent (Web 项目通用配置)
├── spring-web-parent (Spring Web 项目配置)
└── ...我们的 Parent POM 实现
我们的 Parent POM 提供了以下特性:
- 标准化构建配置:统一的编译、测试、打包配置
- 依赖版本管理:通过 BOM 管理依赖版本
- 插件预配置:预设常用 Maven 插件及其配置
- 最佳实践集成:集成行业最佳实践和规范
- 易于扩展:提供良好的扩展点供项目定制
通过继承我们的 Parent POM,开发者可以快速搭建符合规范的 Maven 项目,减少配置工作量,提高开发效率。