4 个交互式演示帮你深刻理解 Gradle 最关键的概念。看懂这些,你就 Gradle 半个内行了。
下面这段 build.gradle.kts 共 9 行代码。点击"▶ 跑 ./gradlew foo"按钮,观察每行在哪个阶段执行(绿色 = 配置阶段,黄色 = 执行阶段)。
💡 关键观察:
- 跑 ./gradlew tasks 时,register 闭包里的 println 也会跑(因为配置阶段总会执行)
- 但 doFirst / doLast 的 println 不会跑(因为没真正执行 foo)
- 这就是"配置阶段一定跑、执行阶段按需跑"
Gradle 在配置阶段把所有 Task 的 dependsOn 关系组合成一个有向无环图。点击下方按钮模拟从某个目标 Task 反向追踪 + 拓扑序执行。
💡 关键观察:
- 跑 build 触发整个图;跑 test 只触发左半边;跑 jar 只触发右半边
- 节点变黄表示正在执行;变绿表示完成
- 没有依赖关系的兄弟 Task(如 compileJava 和 compileTestJava)可以并行执行
每个 Task 维护一个动作链表。doFirst 把动作加到链表头(多个 doFirst 倒序),doLast 加到链表尾(多个 doLast 顺序)。
💡 试试:
- 加 3 个 doFirst(A、B、C),观察执行顺序:C → B → A(后加的先执行,因为 doFirst 是"插到队头")
- 加 3 个 doLast(X、Y、Z),观察执行顺序:X → Y → Z(按添加顺序)
选择一个常见插件,看看它实际给项目注入了哪些 Task / Configuration / 约定。