主题
第 0 章 Gradle 学习计划:从 0 到 1 的 14 天路线图
本章目的:在你写第一行
build.gradle.kts之前,先告诉你「这条路要走多久、长什么样、容易在哪摔跤、学完后能解决什么问题」。地图先看清,再上路才不至于在Could not find method xxx()报错里转圈。
0.1 学习这件事,先想清楚 3 个问题
0.1.1 你为什么学 Gradle?
不同动机决定了不同的学习侧重点:
| 动机 | 重点章节 | 可以略过的部分 |
|---|---|---|
| 想做 Android 开发 | 1-7 章 + Android 特定章节(自学) | Composite Build、Plugin 发布 |
| Spring Boot 后端转 Gradle | 1-6 章 + 第 8 章多模块 | 自定义插件发布 |
| 接手老项目要看懂构建脚本 | 1-4 章 + 第 6 章依赖 | 自定义 Task / 性能优化 |
| 团队构建慢得想哭,要优化 | 1-3 章打底 + 第 9 章性能 | 第 7 章自定义插件可后看 |
| 准备面试 | 全部,重点 3、5、6、9 章 | 实战项目可略 |
| 写 CI/CD 流水线 | 1-2、5、6、9 章 | / |
| 单纯好奇 | 全部按顺序 | / |
📌 小白建议:先按本笔记从 1 到 10 章学一遍,把基础打牢;之后再根据职业方向深挖具体场景。
0.1.2 你已经会什么?
| 你的背景 | 上手速度 | 难点会出现在哪 |
|---|---|---|
| 用过 Maven | 1-2 天能写出基本 build.gradle | 配置阶段 vs 执行阶段、Task 配置语法 |
| 写过 Java/Kotlin | 3-5 天 | 构建生命周期、增量构建机制 |
| 写过 Python/JS(pip/npm) | 5-7 天 | 静态构建模型、Task DAG |
| 完全零基础 | 2-3 周 | 编程语言基础需要补 |
💡 不会 Groovy / Kotlin 怎么办? 不用怕。Gradle 用到的 Groovy / Kotlin 是高度受限的子集(基本就是"赋值 + 调方法 + 闭包"),跟着例子走 1-2 天就能模仿。Kotlin DSL 由于 IDE 智能提示完整,比 Groovy DSL 更适合零基础。
0.1.3 你能投入多少时间?
本笔记规划是每天 1.5-2 小时,14 天能走完。如果你只能每天半小时,那就翻倍到 28 天。
💡 重要心法:Gradle 的"看懂"和"会写"差距巨大。光读官方文档以为懂了,结果一让你写自定义 Task 就抓瞎。每章后面的
code/必须亲手敲并跑通。
0.2 整体路线图(14 天)
★ Gradle 14 天通关图 ★
Day 1-2 Day 3-5 Day 6-8 Day 9-11 Day 12-14
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐
│ 入门 │────►│ 核心 │───────►│ 深入 │──────►│ 生态 │───►│ 实战 │
│ 1-2 章 │ │ 3-4 章 │ │ 5-6 章 │ │ 7-8 章 │ │ 9-10 章 │
└─────────┘ └─────────┘ └─────────┘ └──────────┘ └──────────┘
能跑通 看懂任意 能写自定义 多模块 构建优化
gradlew build build.gradle.kts Task / 调依赖 工程化 + 实战项目阶段 1:入门(Day 1-2,第 1-2 章)
目标:理解 Gradle 是什么,搭好开发环境,能用 wrapper 跑起来。
- ✅ 能向同事解释「Gradle 跟 Maven 的区别」
- ✅
./gradlew build不再陌生,知道为什么用gradlew而不是全局gradle - ✅ 看到
tasks { register("hello") { ... } }能猜个大概
容易摔跤的地方:
- JDK 版本和 Gradle 版本不匹配(最常见报错来源)
- 误用全局
gradle命令,结果版本不对 - IDEA 同步报错时不知道看哪里
阶段 2:核心(Day 3-5,第 3-4 章)
目标:理解 Gradle 的"哲学"——Project + Task + 生命周期;能看懂 Groovy 和 Kotlin 两种 DSL。
- ✅ 能解释「配置阶段做什么、执行阶段做什么」
- ✅ 看到
dependencies { ... }不会再以为是"运行时执行" - ✅ 能把一段 Groovy DSL 翻译成 Kotlin DSL
容易摔跤的地方:
- 把"配置阶段执行的代码"和"任务执行的代码"搞混
- 用 Groovy 思维写 Kotlin DSL,到处缺类型
- 不理解为什么
dependencies { }里implementation(...)可以这么写
阶段 3:深入(Day 6-8,第 5-6 章)
目标:能自己写 Task,搞清楚 implementation/api/compileOnly 这些"配置"到底什么意思。
- ✅ 能写出一个有 input/output 声明、支持增量构建的自定义 Task
- ✅ 能在 5 秒内回答"
api跟implementation区别" - ✅ 能用
./gradlew dependencies排查依赖冲突
容易摔跤的地方:
- 写了自定义 Task 但每次都全量执行(没声明 input/output)
compileOnly、runtimeOnly、implementation、api五兄弟分不清- 同一个库出现多个版本,不知道 Gradle 选了哪个
阶段 4:生态(Day 9-11,第 7-8 章)
目标:理解插件机制,能做多模块工程。
- ✅ 能区分 Plugin DSL
plugins { id("...") }和apply plugin:老语法 - ✅ 能写一个 Convention Plugin 抽出多模块的公共配置
- ✅ 能解释 Composite Build 是什么、解决什么问题
容易摔跤的地方:
apply和plugins {}何时用哪个subprojects {}/allprojects {}滥用导致项目耦合- 多模块之间的
project(":xxx")路径写错
阶段 5:实战(Day 12-14,第 9-10 章)
目标:把构建从 60s 优化到 5s;做一个能写到简历上的多模块项目。
- ✅ 知道 Daemon、构建缓存、配置缓存、并行构建分别是什么
- ✅ 能用
--scan看构建报告找瓶颈 - ✅ 完成一个多模块 Spring Boot / Kotlin 项目
0.3 每章统一的学习方法
每一章都按这个流程走,效率最高:
┌────────────────────────────────────────────────────────────┐
│ Step 1 通读文档(30 min) │
│ ─────────────────────────────────────────────────── │
│ 目标:搞懂"为什么这么设计"。先记概念,不抠细节。 │
├────────────────────────────────────────────────────────────┤
│ Step 2 打开浏览器看 demo.html(10 min) │
│ ─────────────────────────────────────────────────── │
│ 目标:把"生命周期、依赖图、缓存"等抽象概念可视化"看见"。 │
├────────────────────────────────────────────────────────────┤
│ Step 3 亲手敲 code/ 下的脚本并跑通(30-60 min) │
│ ─────────────────────────────────────────────────── │
│ 目标:肌肉记忆。**禁止复制粘贴**!必须 ./gradlew xxx 看到输出。│
├────────────────────────────────────────────────────────────┤
│ Step 4 做章末面试题(20 min) │
│ ─────────────────────────────────────────────────── │
│ 目标:检验是否真的会了。答不上来回去再读一遍文档。 │
├────────────────────────────────────────────────────────────┤
│ Step 5 写一个自己的小变体(30 min) │
│ ─────────────────────────────────────────────────── │
│ 目标:把知识"用到自己脑子里"。"如果改成 …… 怎么写?"。 │
└────────────────────────────────────────────────────────────┘💡 生活化类比:学 Gradle 就像学开车。只看驾驶手册(看文档)永远学不会,必须握方向盘(写脚本);握方向盘也别只在停车场绕(抄例子),必须上路开过(自己改脚本、看报错、调依赖)才记得住。
0.4 学完之后能干什么
| 方向 | 你可以做的事 |
|---|---|
| Android 开发 | 看懂任意 Android 工程的 build.gradle.kts;自己抽 Convention Plugin 统一多模块配置 |
| 后端 Java/Kotlin | 自己搭多模块 Spring Boot 工程;定制集成测试 / 部署 Task |
| DevOps / CI | 写跨 CI 平台的构建脚本;优化构建到 5 秒;做远程构建缓存 |
| 工程化 | 给团队写自定义 Plugin(代码生成、协议同步、文档发布等) |
| 接私活 | 看懂别人甩过来的"老 Gradle 脚本",1 小时排查问题 |
0.5 常见误区 & 心态建议
误区 1:「build.gradle 是配置文件,跟代码无关」
错。 它是 Groovy / Kotlin 代码。每一行都在执行:声明变量、调用方法、传闭包/Lambda。理解它是代码,是从"复制粘贴工程师"进阶的第一步。
误区 2:「全局装个 gradle 就行了,不用 wrapper」
错。 gradle-wrapper 让团队所有人和 CI 都用同一个版本,避免「在我电脑上能跑」的悲剧。一个项目应该 99% 时间都通过 ./gradlew 来跑。
误区 3:「dependencies {} 块是按顺序执行的,越上面越优先」
错。 Gradle 的依赖解析有专门的算法(默认"最高版本优先"),跟书写顺序无关。这是 Gradle 跟 npm/Maven 都不一样的地方,初学者最容易踩。
误区 4:「Gradle 慢就是慢,没办法」
错。 大概率是没开 Daemon、没开构建缓存、没开配置缓存、没开并行;这些开关一拨,构建从 60s 到 5s 不是梦。第 9 章会专门讲。
误区 5:「Kotlin DSL 比 Groovy DSL 难学」
反过来。 Kotlin DSL 类型安全 + IDE 智能补全完整,对小白更友好。Groovy DSL 在 IDE 里基本是"哑的",写错了不报错,运行时才炸。新项目首选 Kotlin DSL。
心态建议
🌱 遇到看不懂的语法就先跳过。第一次学习不需要 100% 理解 Groovy/Kotlin 的所有特性,能记住"
xxx { yyy }是给 xxx 配置 yyy"就够了,第二轮回头再看会豁然开朗。🔥 看到报错先看堆栈最底下几行 +
--stacktrace。Gradle 的报错信息冗长是出了名的,前 50 行经常是无用的"建议",真正的原因在最后。🛡 大胆改
build.gradle.kts,反正能 git checkout。亲手改坏 → 修好,比读 10 遍文档管用。
0.6 学习资源清单
入门
- 📖 本笔记 第 1-10 章
- 🌐 Gradle 官方 Getting Started
- 🎓 Gradle 官方 Samples:https://docs.gradle.org/current/samples/index.html
进阶
- 📖 Gradle 官方 User Guide —— 写得最系统
- 📖 Kotlin DSL Primer —— 转 Kotlin DSL 必读
- 🎥 Gradle 官方 YouTube:https://www.youtube.com/@GradleInc
性能 / 工程化
- 📖 Performance Best Practices
- 🌐 Develocity 博客 —— 大型项目优化案例
插件
- 🌐 Plugin Portal —— 插件市场
- 📖 Implementing Plugins
实战
- 🐙 看任意 Android Kotlin 开源项目的
build.gradle.kts,比如 NowInAndroid(Google 官方示例) - 🐙 Spring Boot 官方 Gradle 示例:https://spring.io/guides/gs/gradle/
0.7 学完一个 self-check 清单
走完 14 天,请用下面这份 checklist 验收自己。打 ≥ 8 个勾代表"基础合格"。
- [ ] 能解释 Gradle 跟 Maven 的 3 个本质区别
- [ ] 能解释 wrapper 是什么、为什么必须用 wrapper
- [ ] 能区分配置阶段(Configuration Phase)和执行阶段(Execution Phase)
- [ ] 能画出
gradle build的 Task 执行图(DAG) - [ ] 能解释
implementation/api/compileOnly/runtimeOnly的差别 - [ ] 能用
./gradlew dependencies看出依赖冲突的最高版本仲裁 - [ ] 能写一个有 input/output 声明、支持增量执行的自定义 Task
- [ ] 能写一个 Convention Plugin(在
buildSrc或build-logic里) - [ ] 能用
--scan或--profile找到构建瓶颈 - [ ] 能解释构建缓存(Build Cache)和配置缓存(Configuration Cache)的区别
🎉 打满 10 个勾:恭喜,可以投 Java/Kotlin/Android 中高级岗位简历了! 😅 不到 5 个勾:别气馁,回去把对应章节再走一遍。