1、Gradle简介与安装

1.1 Gradle的发展历史

我刚开始接触构建工具时,用的是 Ant,后来又切到 Maven。说实话,Maven 的约定优于配置确实方便,但写自定义逻辑时 xml 文件写得让人头疼。直到 2007 年,Gradle 诞生了。

Gradle 最初是作为嵌入式项目的一部分开发的,后来在 2012 年开源。它用 Groovy 写构建脚本,后来又支持 Kotlin DSL。我记得 2015 年左右,Gradle 在 Android 构建上站稳了脚跟——Google 官方把它定为默认构建工具。从那以后,Gradle 的生态就彻底爆发了。

时间 里程碑
2007Gradle 原型开发
2012Gradle 1.0 发布,支持 Groovy DSL
2015Android 官方支持 Gradle,成为 Android 默认构建工具
2017Gradle 4.0 引入 Kotlin DSL
2020Gradle 6.0 正式将 Kotlin DSL 提升为头等公民
2024Gradle 8.x,持续优化构建性能和依赖管理

为什么 Gradle 能后来居上?说白了,它把 Ant 的灵活性和 Maven 的约定结合了起来,再加上基于有向无环图的增量构建,跑构建速度快了不少。

1.2 Gradle的核心特性

我这些年用 Gradle 的感受,以下几个特性最实在:

  • 基于任务(Task)的构建模型——每个构建动作都是一个 Task,Task 之间可以依赖、可以分组,执行时自动按依赖顺序跑。
  • 增量构建——只有输入输出发生变化的 Task 才会重新执行。我曾在一次大型重构后发现构建时间从 15 分钟降到了 2 分钟,就是这个特性的功劳。
  • 灵活的 DSL——Groovy 或 Kotlin 写脚本,比 xml 直观得多。你可以在 build.gradle 里直接写 if-else、循环,甚至自定义扩展。
  • 依赖管理——支持 Maven 中央仓库、JCenter、本地文件等,自带依赖版本锁定和传递依赖排除。
  • 多项目构建——微服务项目里,一个根项目下面几十个子项目,Gradle 通过 settings.gradle 统一管理,非常方便。
  • 缓存和远程缓存——别人跑过的构建结果,你可以直接拉下来复用,团队协作时效率翻倍。

⚠️ 核心概念:Gradle 里的“依赖”不只是 jar 包,还包括任务间的依赖关系。理解了这个,后面配置多模块项目时就不会糊涂了。

1.3 安装与配置

安装 Gradle 其实很简单,但我遇到过几种坑,一并告诉你。

前置条件

  • JDK 8 以上(建议 JDK 17 LTS,Gradle 8.x 对 JDK 17 支持最好)
  • 设置 JAVA_HOME 环境变量

安装方式(推荐手动解压)

我个人习惯用 SDKMAN 管理,不过很多公司环境不允许装 SDKMAN,所以手动安装更通用:

  1. 从 Gradle 官网下载对应版本的 binary-only 包
  2. 解压到自定义目录,比如 C:\gradle-8.6
  3. 添加 gradle 的 bin 目录到系统 PATH
  4. 设置 GRADLE_HOME 环境变量
# Linux / macOS
export GRADLE_HOME=/opt/gradle-8.6
export PATH=$GRADLE_HOME/bin:$PATH

# Windows 设置完记得重启终端验证

💡 验证安装:终端执行 gradle -v。我碰到过新同事没加 PATH,直接运行报“不是内部命令”,检查一下环境变量就好。

配置 Gradle 用户级设置

Gradle 有一个 ~/.gradle/gradle.properties 文件(Windows 是 %USERPROFILE%\.gradle)。我建议把以下配置写进去,能省不少麻烦:

# 设置并行编译
org.gradle.parallel=true
# 开启构建缓存
org.gradle.caching=true
# JVM 参数(建议 1/4 物理内存)
org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m

⚠️ 我曾经吃过亏:在 Jenkins 上忘记设置缓存目录,导致每次打包都重新下载所有插件。记得把 .gradle 目录加入公司网络共享盘,或者配置远程缓存。

1.4 基本命令实战

安装好之后,我们跑几个命令感受一下。

命令 用途
gradle help显示所有可用任务和选项
gradle tasks列出当前项目的任务树
gradle dependencies显示项目依赖树(非常关键)
gradle build执行完整构建(编译、测试、打包)
gradle clean build先清理再构建
gradle test --tests *UserService*按模式执行特定测试
gradle --console rich build启用彩色输出,阅读更舒服

我在项目中经常用 gradle dependencies 来检查是否有冲突或版本重叠。比如想找出 slf4j 的传递依赖,直接 gradle dependencies --configuration compileClasspath,一目了然。

# 实际输出示例(部分)
compileClasspath - Compile classpath for source set 'main'.
+--- org.springframework.boot:spring-boot-starter-web:3.2.0
|    +--- org.springframework.boot:spring-boot-starter:3.2.0
|    |    +--- org.springframework.boot:spring-boot:3.2.0
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:3.2.0
|    |    \--- org.slf4j:slf4j-api:2.0.9 -> 2.0.12
|    +--- org.springframework:spring-web:6.1.0
|    \--- org.springframework:spring-webmvc:6.1.0

看见那个 -> 2.0.12 了吗?这表示 Gradle 自动选择了较高的版本,避免了冲突。

知识体系总览

Gradle 知识体系总览 Gradle 构建系统 发展历史 Ant → Maven Gradle 1.0 (2012) Android 官方支持 (2015) 核心特性 任务模型 增量构建 DSL (Groovy/Kotlin) 依赖管理 多项目 & 缓存 安装配置 JDK 8+ / JAVA_HOME 手动 / SDKMAN 安装 gradle.properties 配置 基本命令:build / test / dependencies / clean 💡 主线逻辑 理解 Gradle 的演变 → 掌握核心特性 → 正确配置环境 → 熟练使用命令 其中的依赖管理能力将在后续章节中重点深入

接下来怎么用

到这里,Gradle 已经装好、基本命令也能跑了。但说实话,这只是个开始。接下来的章节我会带你深入依赖管理的细节——比如怎么配置仓库、怎么锁定版本、怎么解决冲突。你想想看,一个项目几十个模块,几百个 jar 包,要是没点章法,光合并代码都能让人崩溃。别急,我们一步步来。