Appearance
性能调优
综合运用各种技术手段,最大化 Gradle 构建速度。
性能检查清单
properties
# gradle.properties 推荐配置
# JVM 内存(根据项目大小调整,通常 2-4G)
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# 守护进程
org.gradle.daemon=true
# 并行构建(多项目)
org.gradle.parallel=true
# 构建缓存
org.gradle.caching=true
# 配置缓存(Gradle 8+)
org.gradle.configuration-cache=true
# 按需配置(只配置需要的子项目)
org.gradle.configureondemand=true诊断工具
bash
# 生成构建扫描(最全面的分析)
./gradlew build --scan
# 生成性能报告
./gradlew build --profile
# 报告:build/reports/profile/profile-*.html
# 查看构建时序
./gradlew build --info 2>&1 | grep "took"常见性能问题
1. 配置阶段太慢
kotlin
// ❌ 配置阶段执行耗时操作
tasks.register("myTask") {
val data = readHugeFile() // 每次构建都执行
doLast { process(data) }
}
// ✅ 推迟到执行阶段
tasks.register("myTask") {
doLast {
val data = readHugeFile()
process(data)
}
}2. 依赖解析慢
kotlin
// ✅ 使用依赖缓存
configurations.all {
resolutionStrategy.cacheChangingModulesFor(24, TimeUnit.HOURS)
resolutionStrategy.cacheDynamicVersionsFor(24, TimeUnit.HOURS)
}3. 重复下载依赖
bash
# 离线模式(使用本地缓存)
./gradlew build --offline
# 或配置镜像加速
# 见仓库配置章节4. 测试太慢
kotlin
tasks.named<Test>("test") {
// 并行测试(每个 fork 独立 JVM)
maxParallelForks = Runtime.getRuntime().availableProcessors()
// 只重新运行失败的测试
// ./gradlew test --tests "*.FailedTest"
}构建时间基准
| 优化手段 | 预期加速 |
|---|---|
| 增量构建(默认开启) | 2-10x |
| 构建缓存 | 3-20x(CI 场景) |
| 配置缓存 | 1.5-3x(小项目) |
| 并行构建 | 2-4x(多项目) |
| 国内镜像 | 依赖下载 5-20x |
| 增加 JVM 内存 | 1.2-2x |
大型项目建议
kotlin
// 避免 subprojects {} 在大型多项目中的性能问题
// 改用约定插件(Convention Plugin)
// ❌ 低效:根项目 subprojects {} 配置所有子项目
subprojects {
// 这会在配置阶段处理所有子项目
apply(plugin = "java")
dependencies {
"testImplementation"(...)
}
}
// ✅ 高效:约定插件(子项目按需应用)
// 子项目 build.gradle.kts
plugins {
id("java-conventions") // 只有应用了才配置
}下一步
- Jenkins 集成 - CI 构建配置
- GitHub Actions 集成 - GitHub CI 配置