tlias智能学习辅助系统--Maven高级-聚合
目录
1. 什么是聚合(Aggregation)
2. 聚合工程的特点
3. Maven 聚合配置
4. 示例项目结构
5. 实战:Maven 多模块项目配置
父工程 tlias-parent 的 pom.xml
6. 关键点解析
7. 开发小贴士
1. 什么是聚合(Aggregation)
定义
聚合就是将多个独立的模块组织成一个整体,通过一次构建命令同时构建多个模块。
作用
-
快速构建:只需在聚合工程执行
mvn install
,即可根据依赖关系自动构建所有子模块。 -
统一管理:便于集中管理依赖、版本与构建配置。
2. 聚合工程的特点
-
无业务代码:通常是一个空工程,只包含一个
pom.xml
文件。 -
统一入口:执行构建命令时,会自动触发所有子模块的构建。
-
构建顺序自动确定:Maven 会根据模块之间的依赖关系决定构建顺序,与
<modules>
中书写的顺序无关。
3. Maven 聚合配置
在父工程的 pom.xml
中使用 <modules>
指定子模块路径:
<!-- 聚合模块配置 -->
<modules><module>../tlias-pojo</module><module>../tlias-utils</module><module>../tlias-web-management</module>
</modules>
注意
路径是相对于父工程
pom.xml
的相对路径子模块必须有自己的
pom.xml
文件
4. 示例项目结构
tlias-parent (父工程 / 聚合工程)
├── tlias-pojo
├── tlias-utils
└── tlias-web-management
5. 实战:Maven 多模块项目配置
假设我们有一个项目 web-ai-project03
,采用如下结构:
-
父工程:
tlias-parent
(聚合 + 父 POM) -
子模块:
-
tlias-pojo
(实体类模块) -
tlias-utils
(工具类模块) -
tlias-web-management
(Web 管理后台模块)
-
父工程 tlias-parent
的 pom.xml
<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><!-- 继承 Spring Boot 默认配置 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.10</version><relativePath/></parent><!-- 聚合子模块 --><modules><module>../tlias-pojo</module><module>../tlias-utils</module><module>../tlias-web-management</module></modules><!-- 项目唯一标识 --><groupId>com.itheima</groupId><artifactId>tlias-parent</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging>
</project>
6. 关键点解析
-
父工程继承
-
通过
<parent>
继承spring-boot-starter-parent
,所有子模块自动获得 Spring Boot 的默认依赖和插件配置。
-
-
模块聚合
-
<modules>
中声明的子模块会被一次性构建。
-
-
项目坐标
-
groupId
、artifactId
、version
组成了 Maven 工程的唯一坐标,子模块通过继承父 POM 获得这些信息。
-
7. 开发小贴士
-
聚合工程不仅能构建多个模块,还能结合 继承(Inheritance),在父工程集中管理依赖版本,避免版本冲突。
-
当子模块路径不在父工程目录下时,要确保
<module>
使用正确的相对路径。 -
在 CI/CD 中,聚合工程可以作为构建入口,减少构建脚本的复杂度。
✅ 总结
Maven 聚合让多模块项目的构建变得简单高效,只需在父工程执行一次构建命令,就能自动处理子模块依赖与构建顺序,适合大型项目的模块化管理。