Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便。它使用一种基于 Groovy 的特定领域语言来声明项目设置,而不是传统的 XML。
目前在 Android 开发中已经广泛使用,并且越来越多的 Java Web 项目也开始使用 Gradle 作为项目构建工具。
安装 Gradle
官网下载地址: https://gradle.org/install/ ,安装前先配置本地 JDK 环境。
1 |
java -version |

方式一:使用 SDK 包管理器进行安装
1 |
sdk install gradle 5.3.1 |
方式二:macOS 可使用 Homebrew 工具进行安装。
1 |
brew install gradle |
方式三:如果感觉上面的方式太简单,可以下载 Gradle 安装,并手动配置环境变量。手动安装请查看文档:https://gradle.org/install/#manually 。
安装完成后,检查是否配置成功。
1 |
gradle -v |

创建 Gradle 项目
使用 IDEA 创建 Gradle 项目,这里我们创建 Java 项目。


勾选 Use auto-import
自动导包,并使用我们刚安装好的 Gradle ,我是使用 Homebrew 安装的,所以安装路径在 /usr/local/Cellar
目录下。
Groovy 入门
Gradle 目前支持 Java
、 Groovy
、 Scala
,最终编译后都是运行在 JVM 虚拟机上的。
首先打开 IDEA 的 Groovy Console 工具。

编写一个简单的 JavaBean 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public class Test { private int age; private String name; public Test(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
测试编写的 JavaBean。
1 2 |
Test test = new Test(12, "jack"); println(test.getName()); |
运行完全没问题,说明 Groovy 兼容 Java 代码的。

改造我们刚写的 JavaBean,去掉修饰符、句尾分号、getter/setter
方法,运行和刚才一样的结果,说明 Groovy 可以省略句尾分号,自动生成 getter/setter
方法,修饰符默认是 public
。
1 2 3 4 5 6 7 8 9 |
class Test { int age String name Test(int age, String name) { this.age = age this.name = name } } |

Groovy 高效特性
类型推导:类似 JavaScript 中使用 var 关键字定义变量,不用指定数据类型。
1 |
def version = 1 |
断言:使用 assert 断定条件,不满足则报错。
1 |
assert version == 2 |
小括号:调用方法可以省略小括号。
1 2 |
println(version) println version |
字符串:Groovy 中字符串支持三种编写方式。
1 2 3 4 5 6 7 8 9 |
def s1 = '一个单引号普通字符串' def s2 = "双引号可以插入变量 version = ${version}" def s3 = '''三个单引号 可以支持 换行''' println s1 println s2 println s3 |
集合:Groovy List 集合默认是 ArrayList , Map 默认是 LinkedHashMap 。给集合添加元素和取出元素,也有简写方式。
1 2 3 4 5 6 |
def buildTools = ['ant', 'maven'] buildTools << 'gradle' buildTools.add 'test' assert buildTools.getClass() == ArrayList assert buildTools.size() == 4 |
1 2 3 4 5 6 7 |
def buildYears = ['ant': 2000] buildYears['maven'] = 2004 buildYears.gradle = 2009 assert buildYears.getClass() == LinkedHashMap println buildYears.maven println buildYears['gradle'] |
闭包:有点类似 Java 中的匿名内部类的语法糖 Lambda 表达式、 Swift 中的闭包。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
def c1 = { v -> println v } def c2 = { println 'hello' } def method1(Closure closure) { closure('param') } def method2(Closure closure) { closure() } method1 c1 method2 c2 |
不过闭包在 Gradle 构建工具使用中,我们一般只使用一种方式。
1 2 3 4 5 6 7 8 |
def test(Closure closure) { closure() } // 调用闭包 test { println 'Hello Closure' } |

解析 build.gradle
我们在使用 Gradle 创建项目后,项目目录下会有一个 build.gradle
构建脚本配置文件,我们编写配置就是在这个文件中。
我目前的 Gradle 版本是 5.3.1 ,不同版本默认生成的 build.gradle 文件中的内容也略有不同,不过只要了解了 Groovy 基础语法,都是能看懂的。
在解析这个构建配置文件之前,要先了解一个概念:构建脚本中默认有一个 Project 实例。
基于这个概念,我们再去看这个构建脚本中的内容就比较容易理解了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
plugins { id 'java' } group 'com.zaiae.gradle' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' } |
语法:
调用 Project 实例中的 plugins 方法,传入一个闭包参数。给闭包中的 id 属性赋值 java 字符串。
作用:
使用 Java 插件。
1 2 3 |
plugins { id 'java' } |
语法:
给 Project 实例中的 group
、version
、sourceCompatibility
3个属性赋值,可以理解成调用对应属性的 setter 方法。
作用:
group 配置了项目的组织标识为 com.zaiae.gradle
,相当于 maven 中的 groupId 。
version 配置了项目的版本号,相当于 maven 中的 version 。
sourceCompatibility 配置了编译项目使用的 JDK 版本。
1 2 3 4 |
group 'com.zaiae.gradle' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 |
语法:
调用 Project 实例中的 repositories 方法,传入一个闭包参数。
作用:
repositories 配置包托管仓库,这里只配置了 maven 中央仓库,还可以配置私服等。
1 2 3 |
repositories { mavenCentral() } |
语法:
调用 Project 实例中的 dependencies 方法,传入一个闭包参数。给闭包中 testCompile 属性赋值一个 map 集合。
作用:
配置项目依赖,相当于 maven 中的 dependencies 。
group 相当于 maven 中的 groupId 。
name 相当于 maven 中的 artifactId 。
version 相当于 maven 中的 version 。
1 2 3 |
dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' } |