1. Gradle入门:从零认识这个构建工具

大家好,我是你们这门课的老朋友。今天咱们聊聊Gradle——这个在Java/Groovy/Kotlin圈子里越来越火的构建工具。

说实话,我最早接触Gradle是在2015年。那时候公司要从Ant迁移到Maven,结果有个同事说:“要不试试Gradle?”我当时还不太信,觉得Maven挺成熟的。结果一试,嗯,真香。

1.1 Gradle发展史:从Ant到Maven再到Gradle

要理解Gradle,得先看看它从哪来。

Ant时代(2000年左右)
Ant是Apache出的第一个Java构建工具。它用XML写构建脚本,灵活但太啰嗦。我记得第一次看Ant的build.xml,光依赖管理就写了200多行。说白了,Ant就是个“脚本执行器”,没有约定,全靠你手写。

Maven时代(2004年左右)
Maven解决了Ant的痛点——它引入了“约定优于配置”的理念。你只要按它的目录结构放代码,它就能自动编译、测试、打包。而且Maven有中央仓库,依赖管理方便多了。

但Maven也有问题:XML太冗长,自定义逻辑很麻烦。你想想看,想在Maven里写个简单的条件判断,得写一堆插件配置。

Gradle诞生(2012年)
Gradle由Hans Dockter等人开发,它吸收了Ant的灵活性和Maven的约定理念,但用Groovy(后来支持Kotlin)作为DSL。2013年,Google宣布Android Studio使用Gradle作为默认构建工具,这直接让Gradle火遍全球。

我个人习惯把Gradle看作“Maven的灵活版 + Ant的简洁版”。它既保留了Maven的依赖管理和生命周期,又让你能用代码写构建逻辑。

核心时间线:

  • 2000年:Ant诞生,XML写构建脚本
  • 2004年:Maven发布,引入约定和依赖管理
  • 2012年:Gradle 1.0发布,基于Groovy DSL
  • 2013年:Google选择Gradle作为Android官方构建工具
  • 2016年:Gradle 3.0支持Kotlin DSL
  • 2020年:Gradle 6.0大幅提升性能和缓存机制

1.2 Gradle核心优势:凭什么选它?

你可能会问:“Maven用得好好的,为什么要换Gradle?”

我当年也有这个疑问。直到我在一个大型微服务项目里,用Maven构建一次要8分钟,换成Gradle后降到2分钟。嗯,这就是差距。

优势一:性能碾压

  • 增量构建:Gradle只重新编译有变化的部分。Maven虽然也有增量,但Gradle做得更彻底。
  • 构建缓存:同一台机器上,相同任务的输出可以直接复用。我在CI/CD里开这个功能后,构建时间直接砍半。
  • 并行执行:Gradle能自动分析任务依赖,并行执行无依赖的任务。Maven默认是串行的。

优势二:DSL更灵活

Maven用XML,Gradle用Groovy或Kotlin。你想想看,用代码写构建脚本是什么体验?

// Maven的依赖声明(XML)
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.1-jre</version>
</dependency>

// Gradle的依赖声明(Groovy DSL)
implementation 'com.google.guava:guava:31.1-jre'

哪个更清爽?一目了然。

优势三:约定与灵活并存

Gradle默认有Maven风格的目录结构,但你完全可以自定义。我在一个老项目里,源码放在src/java而不是src/main/java,Gradle改一行配置就行。Maven?你得写一堆插件配置。

优势四:强大的依赖管理

  • 支持动态版本(如2.+)
  • 支持依赖锁定(dependency locking)
  • 支持复合构建(composite builds)
  • 支持本地依赖缓存

我的建议:如果你是新项目,直接上Gradle。如果是老项目,从Maven迁移到Gradle也很平滑——Gradle能直接引用Maven仓库的依赖。

1.3 Gradle安装与配置环境变量

这部分我踩过不少坑,咱们一步步来。

1.3.1 安装前准备

Gradle需要JDK 8或以上版本。我个人建议用JDK 11或17,因为Gradle对这两个版本支持最好。

# 检查JDK版本
java -version
# 输出示例:openjdk version "17.0.1" 2021-10-19

1.3.2 安装Gradle

方式一:SDKMAN(推荐)

SDKMAN是Java生态的版本管理工具,我一直在用。安装Gradle只需一行命令:

# 安装SDKMAN
curl -s "https://get.sdkman.io" | bash

# 安装Gradle
sdk install gradle 8.5

# 查看已安装版本
sdk list gradle

方式二:手动安装

  1. 从Gradle官网(gradle.org)下载Binary-only包
  2. 解压到指定目录,比如C:\gradle/opt/gradle
  3. 配置环境变量

1.3.3 配置环境变量

Windows系统:

# 新建系统变量
变量名:GRADLE_HOME
变量值:C:\gradle\gradle-8.5

# 编辑Path变量,添加
%GRADLE_HOME%\bin

macOS/Linux系统:

# 编辑 ~/.bashrc 或 ~/.zshrc
export GRADLE_HOME=/opt/gradle/gradle-8.5
export PATH=$PATH:$GRADLE_HOME/bin

# 使配置生效
source ~/.bashrc

我曾经踩过的坑:配置完环境变量后,一定要重新打开终端窗口。否则你运行gradle -v会提示“命令未找到”。另外,注意GRADLE_HOME不要包含bin目录,否则会报错。

1.3.4 验证安装

gradle -v

# 输出示例:
# ------------------------------------------------------------
# Gradle 8.5
# ------------------------------------------------------------
# Build time:   2023-11-29 14:08:57 UTC
# Revision:     b0e1a7a3b5a1c3d4e5f6a7b8c9d0e1f2a3b4c5d
# Kotlin:       1.9.21
# Groovy:       3.0.17
# Ant:          Apache Ant(TM) version 1.10.13
# JVM:          17.0.1 (Oracle Corporation 17.0.1+12)
# OS:           Mac OS X 13.5 aarch64

看到这个输出,说明Gradle安装成功了。

1.4 知识体系总览

为了让你对Gradle有个整体认识,我画了张图:

Gradle知识体系总览 Gradle构建工具 发展史 Ant → Maven → Gradle 核心优势 性能 · DSL · 灵活 · 依赖管理 安装与配置 SDKMAN · 手动 · 环境变量 一句话总结:Gradle = 性能 + 灵活 + 现代化

1.5 第一个Gradle项目

安装完别闲着,咱们跑个Hello World验证一下。

# 创建项目目录
mkdir my-first-gradle-project
cd my-first-gradle-project

# 初始化Gradle项目(交互式)
gradle init

# 选择:
# 1: Application
# 2: Java
# 3: Groovy DSL
# 4: JUnit Jupiter
# 项目名:my-first-gradle-project

初始化完成后,你会看到这样的目录结构:

my-first-gradle-project/
├── build.gradle          # 构建脚本
├── settings.gradle       # 项目设置
├── gradlew               # Gradle Wrapper(Linux/Mac)
├── gradlew.bat           # Gradle Wrapper(Windows)
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
└── src/
    ├── main/
    │   └── java/
    │       └── App.java
    └── test/
        └── java/
            └── AppTest.java

运行构建:

# 编译并运行
./gradlew run

# 输出:
# > Task :run
# Hello World!

小提示:注意看,我们用的是gradlew而不是gradle。这是Gradle Wrapper,它会自动下载指定版本的Gradle。这样团队里所有人都用同一个版本,避免“在我机器上能跑”的尴尬。

1.6 本章小结

咱们这一章聊了Gradle的来龙去脉、它比Maven/Ant强在哪,以及怎么装怎么配。说白了,Gradle就是构建工具界的“瑞士军刀”——能切菜(简单项目),也能拆墙(大型项目)。

我个人觉得,Gradle最打动我的不是它的性能,而是它的设计哲学:用代码写构建。当你习惯了用Groovy或Kotlin表达构建逻辑后,再回头看Maven的XML,你会觉得那简直是上个世纪的产物。

嗯,下一章咱们会深入Gradle的核心概念——Project、Task和Plugin。不过那是后话了,先把环境配好,跑通第一个项目再说。


公众号:蓝海资料掘金营,微信 deep3321