几种创建 gradle 任务的方法
1.普通创建
task hello1 {
doLast{
println 'hello1'
}
}
2.直接用任务名称创建
Task hello2 = task(hello2)
hello2.doLast {
println "hello2"
}
3.任务名称+任务配置创建
Task hello3 = task(hello3,group: BasePlugin.BUILD_GROUP)
hello3.doLast {
println "hello3"
}
4.TaskContainer 的 create 方法创建
tasks.create(name: 'hello4') {
doLast {
println "hello4"
}
}
任务依赖
1.依赖于已经存在的任务的任务声明
task hello {
doLast{
println 'hello'
}
}
task intro{
dependsOn hello
doLast {
println "I'm Gradle"
}
}
执行: gradle -q intro
输出:
hello
I'm Gradle
2.懒惰依赖-另一项任务不存在(目前还不存在
task hello {
dependsOn 'afterhello'
doLast{
println 'hello'
}
}
task afterhello{
doLast {
println "after hello task"
}
}
执行: gradle -q hello
输出:
after hello task
hello
动态定义任务
动态定义任务指的是在运行时来定义任务的名称
4.times { counter ->
task "task$counter" {
doLast {
println "I'm task number $counter"
}
}
}
times是Groovy
在java.lang.Number
中拓展的方法,是一个定时器。4.times中循环创建了三个新任务,隐式变量number的值为0,1,2,3 任务的名称由 task 加上 number 的值组成,达到了动态定义任务的目的。
执行:gradle -q task0
输出:I'm task number 0
操作现有任务
它在运行时动态地向任务添加依赖项
1.通过 api 访问任务-添加依赖项
4.times { counter ->
task "task$counter" {
doLast {
println "I'm task number $counter"
}
}
}
task0.dependsOn task2, task3
执行:gradle -q task0
输出:
I'm task number 2
I'm task number 3
I'm task number 0
也可以将行为添加到现有任务中。
2.通过 api 添加行为访问任务
task hello {
doLast {
println 'Hello Earth'
}
}
hello.doFirst {
println 'Hello Venus'
}
hello.configure {
doLast {
println 'Hello Mars'
}
}
hello.configure {
doLast {
println 'Hello Jupiter'
}
}
执行:gradle -q hello
输出:
Hello Venus
Hello Earth
Hello Mars
Hello Jupiter
Groovy DSL快捷表示
作为构建脚本的属性访问任务
task hello {
doLast {
println 'Hello world!'
}
}
hello.doLast {
println "Greetings from the $hello.name task."
}
执行:gradle -q hello
输出:
Hello world!
Greetings from the hello task.
默认任务
Gradle允许您定义一个或多个默认任务,如果没有指定其他任务,则可以执行这些任务。
defaultTasks 'clean', 'run'
task clean {
doLast {
println 'Default Cleaning!'
}
}
task run {
doLast {
println 'Default Running!'
}
}
task other {
doLast {
println "I'm not a default task!"
}
}
执行:gradle -q
输出:
Default Cleaning!
Default Running!
DAG 配置
Gradle有一个配置阶段和一个执行阶段。在配置阶段之后,Gradle知道应该执行的所有任务。Gradle为您提供了一个利用这些信息的钩子。这样做的一个用例是检查发布任务是否在要执行的任务中。根据这一点,您可以为某些变量分配不同的值。
在下面的示例中,执行distribution
和release
任务导致不同的值。version
变量。
task distribution {
doLast {
println "We build the zip with version=$version"
}
}
task release {
dependsOn 'distribution'
doLast {
println 'We release now'
}
}
gradle.taskGraph.whenReady { taskGraph ->
if (taskGraph.hasTask(":release")) {
version = '1.0'
} else {
version = '1.0-SNAPSHOT'
}
}
执行: gradle -q distribution
输出:We build the zip with version=1.0-SNAPSHOT
执行: gradle -q release
输出:We build the zip with version=1.0