Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便。它使用一种基于 Groovy 的特定领域语言来声明项目设置,而不是传统的 XML。
目前在 Android 开发中已经广泛使用,并且越来越多的 Java Web 项目也开始使用 Gradle 作为项目构建工具。
安装 Gradle
官网下载地址: https://gradle.org/install/ ,安装前先配置本地 JDK 环境。
java -version
方式一:使用 SDK 包管理器进行安装
sdk install gradle 5.3.1
方式二:macOS 可使用 Homebrew 工具进行安装。
brew install gradle
方式三:如果感觉上面的方式太简单,可以下载 Gradle 安装,并手动配置环境变量。手动安装请查看文档:https://gradle.org/install/#manually 。
安装完成后,检查是否配置成功。
gradle -v
创建 Gradle 项目
使用 IDEA 创建 Gradle 项目,这里我们创建 Java 项目。
勾选 Use auto-import
自动导包,并使用我们刚安装好的 Gradle ,我是使用 Homebrew 安装的,所以安装路径在 /usr/local/Cellar
目录下。
Groovy 入门
Gradle 目前支持 Java
、 Groovy
、 Scala
,最终编译后都是运行在 JVM 虚拟机上的。
首先打开 IDEA 的 Groovy Console 工具。
编写一个简单的 JavaBean 。
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。
Test test = new Test(12, "jack");
println(test.getName());
运行完全没问题,说明 Groovy 兼容 Java 代码的。
改造我们刚写的 JavaBean,去掉修饰符、句尾分号、getter/setter
方法,运行和刚才一样的结果,说明 Groovy 可以省略句尾分号,自动生成 getter/setter
方法,修饰符默认是 public
。
class Test {
int age
String name
Test(int age, String name) {
this.age = age
this.name = name
}
}
Groovy 高效特性
类型推导:类似 JavaScript 中使用 var 关键字定义变量,不用指定数据类型。
def version = 1
断言:使用 assert 断定条件,不满足则报错。
assert version == 2
小括号:调用方法可以省略小括号。
println(version)
println version
字符串:Groovy 中字符串支持三种编写方式。
def s1 = '一个单引号普通字符串'
def s2 = "双引号可以插入变量 version = ${version}"
def s3 = '''三个单引号
可以支持
换行'''
println s1
println s2
println s3
集合:Groovy List 集合默认是 ArrayList , Map 默认是 LinkedHashMap 。给集合添加元素和取出元素,也有简写方式。
def buildTools = ['ant', 'maven']
buildTools << 'gradle'
buildTools.add 'test'
assert buildTools.getClass() == ArrayList
assert buildTools.size() == 4
def buildYears = ['ant': 2000]
buildYears['maven'] = 2004
buildYears.gradle = 2009
assert buildYears.getClass() == LinkedHashMap
println buildYears.maven
println buildYears['gradle']
闭包:有点类似 Java 中的匿名内部类的语法糖 Lambda 表达式、 Swift 中的闭包。
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 构建工具使用中,我们一般只使用一种方式。
def test(Closure closure) {
closure()
}
// 调用闭包
test {
println 'Hello Closure'
}
解析 build.gradle
我们在使用 Gradle 创建项目后,项目目录下会有一个 build.gradle
构建脚本配置文件,我们编写配置就是在这个文件中。
我目前的 Gradle 版本是 5.3.1 ,不同版本默认生成的 build.gradle 文件中的内容也略有不同,不过只要了解了 Groovy 基础语法,都是能看懂的。
在解析这个构建配置文件之前,要先了解一个概念:构建脚本中默认有一个 Project 实例。
基于这个概念,我们再去看这个构建脚本中的内容就比较容易理解了。
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 插件。
plugins {
id 'java'
}
语法:
给 Project 实例中的 group
、version
、sourceCompatibility
3个属性赋值,可以理解成调用对应属性的 setter 方法。
作用:
group 配置了项目的组织标识为 com.zaiae.gradle
,相当于 maven 中的 groupId 。
version 配置了项目的版本号,相当于 maven 中的 version 。
sourceCompatibility 配置了编译项目使用的 JDK 版本。
group 'com.zaiae.gradle'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
语法:
调用 Project 实例中的 repositories 方法,传入一个闭包参数。
作用:
repositories 配置包托管仓库,这里只配置了 maven 中央仓库,还可以配置私服等。
repositories {
mavenCentral()
}
语法:
调用 Project 实例中的 dependencies 方法,传入一个闭包参数。给闭包中 testCompile 属性赋值一个 map 集合。
作用:
配置项目依赖,相当于 maven 中的 dependencies 。
group 相当于 maven 中的 groupId 。
name 相当于 maven 中的 artifactId 。
version 相当于 maven 中的 version 。
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}