5月27日 23:21

Gradle 是什么?它有哪些核心概念和优势?

Gradle 是一个基于 JVM 的构建自动化工具,融合了 Ant 的灵活性与 Maven 的约定优于配置理念,使用 Groovy 或 Kotlin DSL 编写构建脚本。它的核心概念围绕 Project、Task、Plugin 三层展开。

Project

每个 Gradle 构建由一个或多个 Project 组成。单模块项目只有一个 Project,多模块项目在 settings.gradle.kts 中声明子项目。每个 Project 对应一个 build.gradle.kts 脚本,是配置的顶级容器。

Task

Task 是 Gradle 执行的最小单元,如编译、测试、打包。Task 之间通过 dependsOn 声明依赖关系,Gradle 据此生成有向无环图(DAG),按拓扑排序执行:

kotlin
tasks.register("copyFiles") { dependsOn("processResources") doLast { copy { from("build/resources") into("dist") } } }

关键点:Task 分为配置阶段和执行阶段,doFirst / doLast 中的逻辑只在执行阶段运行。

Plugin

Plugin 是功能扩展的核心机制。二进制插件通过 plugin ID 应用:

kotlin
plugins { id("org.springframework.boot") version "3.2.0" }

插件内部通过注册 Task、扩展 DSL、配置依赖来改变构建行为。Java Plugin、Android Plugin 都是这个模式。

构建生命周期

Gradle 构建分三个阶段:

  1. 初始化:执行 settings.gradle.kts,确定参与构建的 Project
  2. 配置:执行所有 build.gradle.kts,构建 Task 依赖图
  3. 执行:按 DAG 顺序执行目标 Task 及其依赖

理解生命周期是排查构建问题的关键——配置阶段的代码每次构建都会执行,即使只运行一个 Task。

依赖管理

Gradle 支持 Maven、Ivy 仓库和本地文件依赖,提供 resolutionStrategy 处理版本冲突,默认取最新版本。implementation 与 api 的区别是常见追问点:implementation 依赖不传递,api 依赖会传递到上层模块。

Gradle Wrapper

项目自带 gradlew 脚本,自动下载指定版本的 Gradle,保证团队构建环境一致。无需手动安装 Gradle 即可构建项目。

核心优势

  • 增量构建:只重新执行输入输出有变化的 Task
  • 构建缓存:跨项目复用相同 Task 的输出
  • 并行执行:多模块并行构建,利用多核 CPU

这三项机制叠加,使 Gradle 在大型项目中的构建速度远超 Maven。

常见追问

Gradle 和 Maven 的核心区别? Maven 基于 XML 声明式配置,逻辑固定在插件中;Gradle 用 DSL 编程式定义构建逻辑,灵活度更高,且增量构建和缓存机制使其速度更快。

implementation 和 api 有什么区别? implementation 的依赖对上层模块不可见,修改时不触发上层重新编译;api 的依赖会传递,适合暴露给消费者的公共 API 依赖。

标签:Gradle