从头开始学gradle【Gradle 构建基础】

构建基础

Project 和 task:projects 和 tasks是 Gradle 中最重要的两个概念。

任何一个 Gradle 构建都是由一个或多个 projects 组成。每个 project 包括许多可构建组成部分。 这完全取决于你要构建些什么。举个例子,每个 project 或许是一个 jar 包或者一个 web 应用,它也可以是一个由许多其他项目中产生的 jar 构成的 zip 压缩包。一个 project 不必描述它只能进行构建操作。它也可以部署你的应用或搭建你的环境。不要担心它像听上去的那样庞大。 Gradle 的 build-by-convention 可以让您来具体定义一个 project 到底该做什么。

每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。如编译,打包,生成 javadoc,发布到某个仓库等操作。到目前为止,可以发现我们可以在一个 project 中定义一些简单任务,后续章节将会阐述多项目构建和多项目多任务的内容。

注意 << 在gradle 在5.1 之后废弃了

快速定义任务

task hello  {
println 'Hello world!'
}
上面的脚本又一次采用闭包的方式来定义了一个叫做 hello 的任务,本文档后续章节中我们将会更多的采用这种风格来定义任务。

在 gradle 任务中采用 groovy

task upper  {
String someString = 'mY_nAmE'
println "Original: " + someString
println "Upper case: " + someString.toUpperCase()
}
Output of gradle -q upper
> gradle -q upper
Original: mY_nAmE
Upper case: MY_NAME

或者

task count  {
4.times { print "$it " }
}
Output of gradle -q count
> gradle -q count
0 1 2 3

任务依赖

你可以按如下方式创建任务间的依赖关系

在两个任务之间指明依赖关系
build.gradle task hello {
println 'Hello world!'
}
task intro(dependsOn: hello) {
println "I'm Gradle"
}

延迟依赖

task taskX(dependsOn: 'taskY')  {
println 'taskX'
}
task taskY {
println 'taskY'
} 可以看到,taskX 是 在 taskY 之前定义的,这在多项目构建中非常有用。 注意:当引用的任务尚未定义的时候不可使用短标记法来运行任务。

动态任务

借助 Groovy 的强大不仅可以定义简单任务还能做更多的事。例如,可以动态定义任务

4.times { counter ->
task "task$counter" {
println "I'm task number $counter"
}
} Output of gradle -q task1
\> gradle -q task1
I'm task number 1

任务操纵

一旦任务被创建后,任务之间可以通过 API 进行相互访问。这也是与 Ant 的不同之处。比如可以增加一些依赖。

通过 API 进行任务之间的通信 - 增加依赖

4.times { counter ->
task "task$counter" {
println "I'm task number $counter"
}
}
task0.dependsOn task2, task3

.....等等

上一篇:CSS3选择器p:nth-child和p:nth-of-type之间的差异


下一篇:android TextView Unicde编码转换 android中一些特殊字符Unicode码值