编写一个Task
新建项目
同样把gradle改为我们自己的版本
同上一节一样的,把build.gradle改为build.gradle.kts,这样我们就可以用kotlin语法写东西了
如下图所示,编写一个名为“helloworld”的任务,内容是打印一句话
点击gradle面板中的刷新按钮,会出现other-helloworld任务
双击执行它
或者打开Terminal执行gradle helloworld
任务的依赖
把大象放进冰箱总共分三步
- 把冰箱门打开
- 把大象放进去
- 关上冰箱门
这三个步骤存在依赖关系,如果不把冰箱门打开,大象是放不进去的。我们在build.gradle.kts中编写这样的任务
task("opendoor",{
})
task("putelephant",{
}).dependsOn("opendoor")
task("closedoor",{
}).dependsOn("putelephant")
可以看到putelephant
这个任务依赖于opendoor
,closedoor
依赖于putelephant
点击刷新,other中出现了这三个任务
如果运行opendoor,就只运行了opendoor
如果运行putelephant,会先执行 opendoor,再执行putelephant
以此类推,运行closedoor,结果如下
Task的生命周期
我们把上面的任务调整一下顺序,同时添加一些内容
task("closedoor",{
println("close door")
}).dependsOn("putelephant")
task("putelephant",{
println("put elephant")
}).dependsOn("opendoor")
task("opendoor",{
println("open door")
})
运行closedoor
任务执行顺序是对的,但是打印的顺序好像不太对?
任何gradle脚本构建的时候,会对脚本进行扫描,然后会把闭包中的声明逻辑执行一下,刚才的打印就是声明逻辑,所以刚才的输出是不正确的
如果想把刚才的println代码改为运行时代码,改为
task("closedoor",{
doFirst{
println("close door")
}
}).dependsOn("putelephant")
task("putelephant",{
doFirst{
println("put elephant")
}
}).dependsOn("opendoor")
task("opendoor",{
doFirst{
println("open door")
}
})
运行结果
doFirst{}当某一个任务开始做的时候才执行
task("xx",{
var xx = "xx"//扫描时执行
doFirst{}//运行时执行
doLast{}//运行时执行
})
Tasks任务集
Gradle的默认任务
即使build.gradle.kts什么都不写,gradle也是有任务的,截图中展示的就是Gradle的默认任务
另一种查看方式是在terminal输入gradle tasks
Gradle属性
task("println",{
project.properties.forEach{
k,v ->
println("$k:$v")
}
})
Gradle默认任务
之前我们执行gradle任务是gradle 任务名
现在设置一个默认任务
task("println",{
project.properties.forEach{
k,v ->
println("$k:$v")
}
})
defaultTasks("println")
当我们输入gradle
时就会默认执行prinln这个任务了