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
方式二:手动安装
- 从Gradle官网(gradle.org)下载Binary-only包
- 解压到指定目录,比如
C:\gradle或/opt/gradle - 配置环境变量
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有个整体认识,我画了张图:
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。不过那是后话了,先把环境配好,跑通第一个项目再说。