Gradle 基础

Gradle 的任务图、依赖声明与常用 Java 插件:与 Maven 的分工与选型意识。

#type / concept #status / growing #tech / dev #resource / java

[!info] 关联笔记

Gradle 基础

这个概念为什么出现

Gradle 在 Android 与许多服务端仓库流行:灵活的任务图、增量构建与多语言 DSL。理解其任务依赖配置后,才能读懂现代 Java 仓库。

[!abstract] 一句话理解 Gradle 以任务图执行构建;Java 插件提供编译/测试/打包约定;依赖配置(implementation/api/testImplementation)控制编译类路径与暴露面。

最小可运行示例

场景:应用 Java 插件的最小构建(Kotlin DSL 示意)

// build.gradle.kts 概念片段
plugins {
    java
}
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(21))
    }
}
dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
}
tasks.test {
    useJUnitPlatform()
}

常用命令:

./gradlew test
./gradlew build
./gradlew dependencies

结合场景再看三个关注点

  1. **Wrapper(gradlew)**锁定发行版。
  2. implementation vs api 影响消费者编译。
  3. 增量与缓存是性能关键,但正确性仍靠任务输入输出声明。

核心概念与准确模型

1. 项目与任务

  • 任务有依赖
  • build 聚合多种检查

2. 依赖配置

implementation / api / runtimeOnly / testImplementation…

3. 与 Maven 坐标

仍使用 Maven 中央等仓库坐标解析。

边界情况与反直觉行为

  1. 配置阶段 vs 执行阶段副作用。
  2. 插件版本目录(version catalog)管理不善仍漂移。
  3. 自定义任务忘记声明输入输出导致增量错误。

常见误区

[!warning] 常见误区:在构建脚本写重业务逻辑 构建脚本保持薄,复杂生成器用独立代码。

工程实践

  1. 强制 wrapper。
  2. 依赖目录化(catalog)。
  3. CI 使用 ./gradlew --no-daemon 视环境权衡。
  4. 与 Maven 仓库共存发布。

本节总结

  • 任务图 + Java 插件
  • 配置控制类路径暴露
  • wrapper 保可复现

自测题

  1. 为什么推荐 gradlew 而不是全局 gradle?
  2. api 与 implementation 对库作者意味着什么?
参考答案
  1. 锁定版本,避免“我机器可以”。
  2. api 依赖暴露给消费者编译;implementation 更好封装。

延伸阅读与资料来源

资料类型支撑内容
Gradle User Manual官方核心模型
Building Java Projects官方Java 插件
创建于 2026/7/15 更新于 2026/7/15