反应堆构建与顺序控制
Maven 反应堆(Reactor)自动计算多模块构建顺序并执行。
反应堆概念
定义
反应堆是 Maven 多模块构建的核心机制,负责:
- 收集所有模块
- 计算构建顺序
- 依次执行构建
构建流程
Bash
收集模块 → 计算依赖关系 → 排序 → 依次构建
构建顺序算法
依赖拓扑排序
Bash
依赖关系图:
common(无依赖)
api → common
dao → api
service → api, dao
web → service
构建顺序:
common → api → dao → service → web
规则
| 规则 | 说明 |
|---|---|
| 无依赖优先 | 最底层模块最先构建 |
| 依赖者后置 | 被依赖模块先于依赖者 |
查看构建顺序
使用命令
Bash
mvn validate
输出示例
Bash
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] parent-project
[INFO] common
[INFO] api
[INFO] dao
[INFO] service
[INFO] web
-pl 指定模块
基本用法
Bash
# 构建指定模块
mvn compile -pl service
# 构建多个模块
mvn compile -pl service,dao
# 相对路径指定
mvn compile -pl :service
参数说明
| 参数 | 说明 |
|---|---|
| -pl module | 指定模块名或路径 |
| -pl :artifactId | 使用 artifactId 指定 |
| -pl a,b,c | 多模块逗号分隔 |
-am 同时构建依赖
also-make
Bash
# 构建 web 及其依赖的所有模块
mvn compile -pl web -am
执行顺序
Bash
web 依赖 service
service 依赖 api
api 依赖 common
构建顺序:
common → api → service → web
适用场景
| 场景 | 说明 |
|---|---|
| 单模块测试 | 仅构建相关模块 |
| 局部修改验证 | 快速验证变更影响范围 |
-amd 构建依赖者
also-make-dependents
Bash
# 构建 common 及依赖它的所有模块
mvn compile -pl common -amd
执行顺序
Bash
common 被依赖
api 依赖 common
dao 依赖 api
service 依赖 api
构建:
common → api → dao → service → web
-rf 从指定模块开始
resume-from
Bash
# 从 service 开始构建后续模块
mvn compile -rf service
适用场景
构建中断后从断点继续。
组合使用
常见组合
Bash
# 仅构建 web 及其依赖
mvn clean install -pl web -am
# 构建 common 及其下游
mvn clean install -pl common -amd
# 从 api 开始构建
mvn clean install -rf api
跳过模块
排除模块
Bash
# 排除 web 模块构建
mvn clean install -pl !web
多模块排除
text
mvn clean install -pl !web,!admin
并行构建
-T 参数
text
# 4线程并行构建
mvn clean install -T 4
# 每核心1线程
mvn clean install -T 1C
# 每核心2线程
mvn clean install -T 2C
并行条件
模块间无依赖时可并行:
text
common 独立构建
api、dao 可并行(都依赖 common,但无相互依赖)
构建失败处理
失败后继续
text
mvn clean install --fail-at-end
失败立即停止
text
mvn clean install --fail-fast
失败从不停止
text
mvn clean install --fail-never
要点总结
- 反应堆自动计算模块构建顺序
- 依赖拓扑排序:无依赖先构建
- -pl 指定构建模块
- -am 同时构建依赖模块
- -amd 同时构建依赖者模块
- -rf 从指定模块开始继续
- -T 并行构建加速
📝 发现内容有误?点击此处直接编辑