Gradle是一个汲取 Ant 和 Maven 概念的开源自动化构建工具。它使用基于 Groovy 或 Kotlin 的特定领域语言(DSL)来声明项目设置,抛弃了基于 XML 的各种繁琐配置。
刚工作时参与的 Java 项目都是使用 Maven(也不是特别熟,会用而已) 构建,当时虽然知道 Gradle,不过也没有系统的了解过,只是在一些 Android 相关的项目中见到过。
虽然已有 1 年多没有写过 Java,但最近因为工作需要,开始了解微服务、Spring Cloud、Spring Boot 等,所以打算重新拾起来。在系统学习之前,打算先学习 Gradle,并且以后自己的一些项目就使用 Gradle 作为构建工具。
安装
Gradle 可以在所有主流操作系统上运行,需要 Java(7.0
或更高) 环境。根据官网上的教程下载安装即可,我直接使用 Homebrew 安装。
$ brew install gradle
在终端执行 gradle -v
验证是否安装成功。
创建一个简单地 Gradle 项目
使用 Gradle 的 init
命令可以生成一个项目。
$ cd project
$ gradle init
创建成功后,生成如下内容:
├── build.gradle // 当前项目的构建脚本配置
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar // Gradle Wrapper 可执行 JAR
│ └── gradle-wrapper.properties // Gradle Wrapper 配置文件
├── gradlew // Gradle Wrapper 运行脚本(基于 Unix 系统)
├── gradlew.bat // Gradle Wrapper 运行脚本(Windows)
└── settings.gradle // Gradle 构建脚本的设置脚本文件
Gradle Wrapper 是一个脚本文件,它内部使用 Gradle,必要时会预先下载 Gradle。然后,就可以使用 gradlew
脚本来使用 Gradle。例如:gradlew build
(Windows 系统下使用gradlew.bat build
)。
gradle init
可以生成多种不同类型的项目,甚至能识别简单地 pom.xml
文件。
创建任务
Gradle 通过基于 Groovy 或者 Kotlin 的 DSL(特定领域语言)来提供 API 使我们能创建和配置任务。一个项目(Project)就是多个任务(Task)的集合,每个任务执行一些基本操作。
Gradle 内置了一个任务库,我们可以在自己的构建脚本中使用。例如 Copy
任务,执行文件复制操作,复制过程中还可以重命名和过滤文件。
在 src
目录下创建一个 myfile.txt
文件,并写入 Hello, World!
,定义一个 Copy
(首字母大写) 类型的 copy
任务:
task copy(type: Copy, group: "Custom", description: "Copies sources to the dest directory") {
from "src"
into "dest"
}
当执行 tasks
命令时,会根据 group
进行分组并显示 description
定义的描述信息。
执行任务:./gradlew copy
,这里如果没有 Gradle,会自动下载。安装的目录可以在 gradle-wrapper.properties
文件中配置,默认的 GRADLE_USER_HOME
是当前用户目录(区分 类Unix 和 Windows 系统)下的 .gradle
目录。
执行完后可以发现自动创建了 dest
目录,并复制了 myfile.txt
。
使用插件
Gradle 包含一系列插件,Gradle 插件门户提供了许多插件。该发行版附带的插件之一是 base
插件。结合名为 Zip
的核心类型,可以使用已配置的名称和路径创建项目的 zip 压缩包。
使用 plugins
语法将 base
插件添加到构建脚本文件中。要在文件顶部添加 plugins {}
块:
plugins {
id "base"
}
然后创建一个压缩 src
目录的 任务:
task zip(type: Zip, group: "Archive", description: "Archives sources in a zip file") {
from "src"
setArchiveName "basic-demo-1.0.zip"
}
根据此配置,base
插件会在 build/distributions
目录下创建一个 basic-demo-1.0.zip
压缩包。
探索和调试构建
查看命令行接口文档了解 Gradle 提供的功能。
查看可用的任务
tasks
命令可以列出可调用的任务,包括 base
插件中的任务和自定义任务。
分析和调试构建
Gradle 还提供了一个基于 Web 的丰富的构建视图,称为 构建扫描。
通过使用 --scan
参数或者显示地定义扫描插件,可以免费的在 scans.gradle.com 上创建构建扫描。将构建扫描发布到 scans.gradle.com 上时会将数据发送到 Gradle 服务器。如果要把数据保存在自己的服务器上,查看 Gradle Enterprise
查看构建扫描,能够轻松找到执行的任务,花费的时间,应用的插件等等。
通过 --scan
参数在执行任务的时候创建构建扫描:
$ ./gradlew zip --scan
BUILD SUCCESSFUL in 0s
1 actionable task: 1 up-to-date
Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service. Do you accept these terms? [yes, no]
yes
Gradle Terms of Service accepted.
Publishing build scan...
https://gradle.com/s/2bywros2lyjfs
发布到 scans.gradle.com 需要接受相应的服务条款。
查看可用的属性
properties
命令可以列出可用的项目属性。
我们可以更改许多属性。例如,我们可以尝试将下列行添加到构建脚本文件中,并重新执行 gradle properties
。
description = "A trivial Gradle build"
version = "1.0"