【工欲善其事必先利其器·构建工具】Gradle使用教程·创建新的构建
跟随这个指导,您将创建一个简单的Gradle项目,调用一些基本的Gradle命令,并且感受一下如何使用Gradle来管理项目。
您需要:
1. 花费大概11分钟;
2. 一个终端应用;
3. 安装好JRE或Java JDK(1.8以上版本);
4. 安装好Gradle(4.10.3以上版本);
初始化项目
首先,让我们来创建一个新的目录用来运行项目
❯ mkdir basic-demo
❯ cd basic-demo
然后我们使用Gradle的init 命令来生成一个简单的项目,我们将探索生成的所有东西,以便您确切地知道发生了什么。
❯ gradle init
Starting a Gradle Daemon (subsequent builds will be faster)
BUILD SUCCESSFUL in 3s
2 actionable tasks: 2 executed
如果您想使用Kotlin DSL来初始化,也可以使用gradle init --dsl kotlin命令。
输出“BUILD SUCCESSFUL”表明已成功生成一个“空”项目,如果没有输出请检查Gradle的安装以及JAVA_HOME环境变量的配置。
生成的项目结构如下:
Groovy
├── build.gradle ①
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar ②
│ └── gradle-wrapper.properties ③
├── gradlew ④
├── gradlew.bat ⑤
└── settings.gradle ⑥
Kotlin
├── build.gradle.kts ①
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar ②
│ └── gradle-wrapper.properties ③
├── gradlew ④
├── gradlew.bat ⑤
└── settings.gradle.kts ⑥
① 当前项目的Gradle构建配置脚本文件;
② Gradle Wrapper 可执行JAR文件;
③ Gradle Wrapper 配置属性文件;
④ Gradle Wrapper 基于Unix系统的脚本文件;
⑤ Gradle Wrapper Windows系统脚本文件;
⑥ Gradle 设置脚本文件用来配置Gradle的构建;
注解:init可以生成各种不同类型的项目(后续文档再介绍),甚至知道如何将简单的pom.xml文件转换成gradle。
惊讶吧!我们可以在此结束指导文档了,但是我们也提供给您机会去了解更多如何在项目中使用Gradle,请继续往下吧!
创建一个任务
Gradle提供了很多API接口给通过Groovy或Kotlin DSL来创建或配置任务。通常,一个项目会包含一个任务集,每一个任务都会执行一些基础操作。
Gradle提供了一个任务库,您可以在自己的项目中进行配置。例如,有一种称为Copy的核心类型,它将文件从一个位置复制到另一个位置。复制任务非常有用(有关详细信息,请参阅文档),但是在这里,让我们再次保持简单。执行以下步骤:
1. 在basic-demo根目录下创建一个src文件夹;
2. 在src文件夹中创建一个 myfile.txt的文件,文件内容是任意的(甚至可以是空的),但是为了方便我们仅仅添加一行“Hello,World!”。
3. 在您的build.gradle文件中定义一个名叫“copy”的Copy(注意大写字母)类型任务,这个任务将会将src目录下的所有文件拷贝到新的文件目录(dest)下(这里您不需要去创建dest目录,这个任务会替您去创建)。
build.gradle
task copy ( type : Copy , group : "Custom" , description : "Copies sources to the dest directory" ) {
from "src"
into "dest"
}
build.gradle.kts
tasks.create<Copy>("copy") {
description = "Copies sources to the dest directory"
group = "Custom"
from("src")
into("dest")
}
这里,group和description您可以自己定义为任意内容,您甚至可以省略他们,但是这样做也会在稍后使用的任务报告中省略它们。
现在,您可以执行这个新的copy的任务了:
> ./gradlew copy
> Task :copy
BUILD SUCCESSFUL in 0s 1 actionable task: 1 executed
执行完后请检查src目录下的myfile.txt文件是否被拷贝到了dest目录下,并且其内容也同时被拷贝了。
应用一个插件
Gradle包括一系列的插件,在Gradle插件门户网站中还有更多的插件。发行版中包含的插件之一是基本插件。与称为Zip的核心类型相结合,您可以使用配置的名称和位置创建项目的Zip归档。
使用plugins语法将基本插件添加到构建脚本文件中。确保在文件的顶部添加plugins{}块。
build.gradle
plugins {
id "base"
}
build.gradle.kts
plugins {
id("base")
}
现在可以添加一个任务去创建一个源自 src文件夹的压缩文件了:
build.gradle
task zip(type: Zip, group: "Archive", description: "Archives sources in a zip file") {
from "src"
setArchiveName "basic-demo-1.0.zip"
}
build.gradle.kts
tasks.create<Zip>("zip") {
description = "Archives sources in a zip file"
group = "Archive"
from("src")
setArchiveName("basic-demo-1.0.zip")
}
基本插件与设置一起工作,在 build/distribution文件夹中创建一个名为 basic-demo-1.0.zip的归档文件。在这种情况下,只需运行新的 zip任务并查看生成的 zip文件是否在您期望的位置:
> ./gradlew zip
> Task :zip
BUILD SUCCESSFUL in 0s 1 actionable task: 1 executed
探索并调试您的构建
让我们看看在我们的新项目中,我们还可以用Gradle做些什么。对命令行接口的完整引用也是非常好的。
查看可用的任务
tasks命令列出了可以调用的 Gradle任务,包括基本插件添加的任务,以及刚刚添加的定制任务。
> ./gradlew tasks
分析并调试您的构建
Gradle也提供了一个丰富的、基于 web的构建视图,我们称之为 build scan(构建扫描)。
通过使用--scan选项或显式地将build scan插件应用于您的项目,您可以在scans.gradle.com免费创建一个build scan(创建build scan的相关文档后续发布)。发布构建扫描到https://scans.gradle.com 网站,将这些数据传输到Gradle的服务器。如果想要将数据保存在自己的服务器上,请查看Gradle Enterprise。
尝试通过添加--scan在执行任务时进行扫描来创建构建扫描:
❯ ./gradlew zip --scan
如果您浏览您的构建扫描,您应该能够很容易地找出执行了哪些任务,它们花费了多长时间,应用了哪些插件,等等。下次在*上调试东西时,可以考虑共享一个构建扫描。
有关如何配置和使用 build scan的更多信息,请参见 build scan插件用户手册。
探索更多有用的属性
使用 properties命令可以告诉您项目的属性:
❯ ./gradlew properties
> Task :properties
------------------------------------------------------------
Root project
------------------------------------------------------------
buildDir: /Users/.../basic-demo/build
buildFile: /Users/.../basic-demo/build.gradle.kts
description: null
group:
name: basic-demo
projectDir: /Users/.../basic-demo
version: unspecified
BUILD SUCCESSFUL
name匹配项目的名称,您也可以定义项目的group和version属性,但目前这个示例项目它们采用默认值,如description。
默认情况下,buildFile属性是构建脚本的完全限定路径名,它驻留在projectDir中。
您可以更改许多properties。例如,您可以尝试将以下代码添加到构建脚本文件中,然后重新执行gradle properties 命令。
下一步
恭喜您!您已经创建了一个新的 Gradle构建并学会了如何检查 Gradle构建!接下来还有更多的文档帮助您学习如何使用Gradle构建,敬请期待!