Gradle 构建速度对开发效率影响很大,尤其是在大型项目中。以下是经过实践验证的 Gradle 加速方案,涵盖配置优化、缓存利用、依赖管理等多个维度:
一、基础配置优化
通过修改 gradle.properties
文件(项目根目录或 ~/.gradle/
全局配置)启用核心优化:
# 启用守护进程(关键优化,默认已启用,明确声明确保生效)
org.gradle.daemon=true
# 启用并行构建(多模块项目加速明显)
org.gradle.parallel=true
# 启用构建缓存(复用已构建结果)
org.gradle.caching=true
# 配置JVM内存(根据机器配置调整,避免OOM)
org.gradle.jvmargs=-Xmx4g -Xms2g -XX:MaxMetaspaceSize=512m
# 启用配置缓存(Gradle 6.6+,缓存项目配置阶段结果)
org.gradle.unsafe.configuration-cache=true
# 启用文件系统监视(Gradle 7.5+,监视文件变化,减少扫描时间)
org.gradle.unsafe.file-watching=true
# 限制并行工作线程数(通常设为CPU核心数)
org.gradle.workers.max=4
二、依赖管理优化
- 使用国内镜像仓库
替换默认仓库为国内镜像(如阿里云),加速依赖下载:
repositories {
// 阿里云镜像(优先使用)
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
// 仅在镜像无对应依赖时使用官方仓库
mavenCentral()
gradlePluginPortal()
}
-
避免动态版本依赖
不要使用1.0.+
或latest.release
等动态版本,每次构建都会检查更新,改用固定版本:// 不推荐 implementation 'com.google.guava:guava:31.+' // 推荐 implementation 'com.google.guava:guava:31.1-jre'
-
排除不必要的传递依赖
清理冗余依赖,减少下载和解析时间:implementation('org.springframework.boot:spring-boot-starter-web') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' }
三、构建缓存深度利用
-
本地缓存
已通过org.gradle.caching=true
启用,缓存路径默认为~/.gradle/caches/build-cache-*
,不要频繁清理。 -
远程缓存(团队协作场景)
配置共享远程缓存(如 S3、Nexus 或 Gradle 企业版),团队成员共享构建结果:// settings.gradle buildCache { local { enabled = true } remote(HttpBuildCache) { url = 'http://your-remote-cache-url' enabled = true // 可选:认证配置 credentials { username = 'user' password = 'pass' } } }
四、任务执行优化
-
跳过不必要的任务
开发阶段可跳过测试、文档生成等耗时任务:# 跳过测试 ./gradlew build --exclude-task test # 仅执行编译 ./gradlew compileJava
-
增量构建有效性保障
- 避免在任务中使用
outputs.upToDateWhen { false }
等禁用增量的配置 - 确保任务的
inputs
和outputs
正确声明,Gradle 才能判断是否需要重新执行
- 避免在任务中使用
-
优化测试执行
- 并行执行测试:
test { maxParallelForks = Runtime.runtime.availableProcessors() / 2 }
- 仅运行修改过的测试(配合 IDE 或
--tests
参数)
- 并行执行测试:
五、项目结构与配置精简
-
拆分大型模块
过大的模块会导致增量构建效率下降,按功能拆分为小型模块,利用并行构建优势。 -
减少构建脚本复杂度
- 避免在
build.gradle
中编写复杂逻辑,移至buildSrc
或自定义插件 - 移除未使用的插件和任务,减少配置阶段耗时
- 避免在
-
使用
buildSrc
管理共享逻辑
将通用配置、自定义任务放在buildSrc
中,避免重复解析:project/ └── buildSrc/ └── src/main/groovy/ └── com/example/CommonConfig.groovy
六、工具链与环境优化
-
使用最新 Gradle 版本
新版本通常包含性能优化,通过 wrapper 升级:./gradlew wrapper --gradle-version 8.5
-
使用 Java 17+
Gradle 在 Java 17 上性能优于旧版本,尤其在模块化和垃圾回收上有提升。 -
优化磁盘 I/O
- 将项目和 Gradle 缓存目录放在 SSD 上
- 避免网络文件系统(NFS)存储项目
七、性能分析与瓶颈定位
使用 Gradle 自带工具分析构建瓶颈:
# 生成构建性能报告(在 build/reports/profile 目录)
./gradlew build --profile
# 查看任务执行时间详情
./gradlew build --info
# 调试配置阶段耗时
./gradlew help --scan # 生成详细扫描报告(需联网)
效果验证
优化后可通过以下指标验证提升:
- 首次构建时间:依赖下载优化影响较大
- 增量构建时间:缓存和增量配置起主要作用
- 配置阶段时间:精简脚本和配置缓存影响显著
大型项目通过上述优化,构建时间减少 50% 以上是常见现象,部分场景可提升 80%。