Skip to content

第 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 后端转 Gradle1-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 你已经会什么?

你的背景上手速度难点会出现在哪
用过 Maven1-2 天能写出基本 build.gradle配置阶段 vs 执行阶段、Task 配置语法
写过 Java/Kotlin3-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 秒内回答"apiimplementation 区别"
  • ✅ 能用 ./gradlew dependencies 排查依赖冲突

容易摔跤的地方

  • 写了自定义 Task 但每次都全量执行(没声明 input/output)
  • compileOnlyruntimeOnlyimplementationapi 五兄弟分不清
  • 同一个库出现多个版本,不知道 Gradle 选了哪个

阶段 4:生态(Day 9-11,第 7-8 章)

目标:理解插件机制,能做多模块工程。

  • ✅ 能区分 Plugin DSL plugins { id("...") }apply plugin: 老语法
  • ✅ 能写一个 Convention Plugin 抽出多模块的公共配置
  • ✅ 能解释 Composite Build 是什么、解决什么问题

容易摔跤的地方

  • applyplugins {} 何时用哪个
  • 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 学习资源清单

入门

进阶

性能 / 工程化

插件

实战

  • 🐙 看任意 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(在 buildSrcbuild-logic 里)
  • [ ] 能用 --scan--profile 找到构建瓶颈
  • [ ] 能解释构建缓存(Build Cache)和配置缓存(Configuration Cache)的区别

🎉 打满 10 个勾:恭喜,可以投 Java/Kotlin/Android 中高级岗位简历了! 😅 不到 5 个勾:别气馁,回去把对应章节再走一遍。


下一站 → 第 1 章 · Gradle 是什么 & 为什么这么火 →