多模块构建优化策略
大型多模块项目构建耗时长,可通过并行构建和增量构建优化。
并行构建
-T 参数
Bash
# 指定线程数
mvn clean install -T 4
# 每核心线程数
mvn clean install -T 1C
mvn clean install -T 2C
# 自动检测核心数
mvn clean install -T auto
线程数选择
| 配置 | 说明 |
|---|---|
| -T 4 | 4线程并行 |
| -T 1C | 每CPU核心1线程 |
| -T 2C | 每CPU核心2线程 |
并行条件
无依赖关系的模块可并行:
Bash
common 完成后
api、dao 可并行(都依赖 common)
service 等待 api、dao 完成
构建顺序优化
依赖图分析
XML
┌─────────┐
│ common │
└────┬────┘
│
┌───────────┼───────────┐
│ │ │
┌───▼───┐ ┌───▼───┐ ┌───▼───┐
│ api │ │ dao │ │ util │
└───┬───┘ └───┬───┘ └───────┘
│ │
└───┬───┬───┘
│ │
┌───▼───┐
│service│
└───┬───┘
│
┌───▼───┐
│ web │
└───────┘
优化结构
增加独立模块减少等待:
Bash
util 模块独立
可与 api、dao 并行构建
增量构建
仅构建变更模块
Bash
# 检测变更模块
mvn compile -pl :service -am
IDEA 增量编译
IDEA 自动增量编译,仅编译变更文件。
Maven 增量编译
Bash
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<useIncrementalCompilation>true</useIncrementalCompilation>
</configuration>
</plugin>
跳过不需要的阶段
跳过测试
XML
mvn clean install -DskipTests
仅编译
groovy
mvn compile -pl service
离线构建
使用本地缓存
YAML
mvn clean install -o
避免网络请求,加速构建。
构建缓存
Maven Build Cache Extension
Bash
<extension>
<groupId>org.apache.maven.extensions</groupId>
<artifactId>maven-build-cache-extension</artifactId>
<version>1.0</version>
</extension>
缓存效果
- 缓存编译产物
- 跳过未变更模块
- 大幅减少构建时间
性能对比
单线程 vs 多线程
Bash
单线程(默认):10分钟
4线程并行: 4分钟
8线程并行: 2.5分钟
优化效果
| 策略 | 效果 |
|---|---|
| 并行构建 | 减少50%-70%时间 |
| 跳过测试 | 减少30%-50%时间 |
| 离线构建 | 减少10%-20%时间 |
| 增量编译 | 减少80%-90%时间 |
CI/CD 优化
Jenkins 配置
Bash
pipeline {
stages {
stage('Build') {
steps {
sh 'mvn clean install -T 2C -DskipTests'
}
}
}
}
GitHub Actions
XML
- name: Build
run: mvn clean install -T 2C -DskipTests
构建性能监控
查看构建耗时
text
mvn clean install -T 4 --batch-mode > build.log
grep "Total time" build.log
分析瓶颈
text
mvn clean install -X | grep "time"
JVM 参数优化
MAVEN_OPTS
text
export MAVEN_OPTS="-Xmx2g -XX:+UseG1GC"
mvn clean install -T 4
内存配置
| 项目规模 | 推荐 JVM 内存 |
|---|---|
| 小型 | 512M - 1G |
| 中型 | 1G - 2G |
| 大型 | 2G - 4G |
并行构建注意事项
线程安全
- 插件需支持并行执行
- 避免共享资源竞争
- 测试并行可能导致问题
配置测试并行
text
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<parallel>classes</parallel>
<threadCount>4</threadCount>
</configuration>
</plugin>
要点总结
- -T 指定并行线程数,-T 1C 每核心1线程
- 无依赖模块可并行构建
- 增量构建仅编译变更模块
- -o 离线构建避免网络请求
- MAVEN_OPTS 配置 JVM 内存
- 跳过测试加速构建
- 构建缓存进一步优化
📝 发现内容有误?点击此处直接编辑