----《Android Gradle 权威指南》学习笔记
-
其实并没有真正的任务排序功能,也就是说不是通过设置优先级或 order 顺序实现。而是通过任务的 shouldRunAfter 和 mustRunAfter 这两个方法来控制一个任务 应该/必须 在某个任务之后执行。
-
通过这种方式可以在某些情况下控制任务的执行顺序,而不是通过强制依赖的方式。
-
这个功能是非常有用的,比如项目中设置的顺序是:必须先执行单元测试,然后才能进行集成测试来保证软件的质量,测速完成后再打包上传发布等操作。
-
具体的语法是:
taskB.shouldRunAfter(taskA):taskB 应该在 taskA 执行之后再执行。这里是应该,不是必须,所以有可能任务顺序并不会按预设的执行。
taskB.mustRunAfter(taskA):taskB 必须在 taskA 执行之后再执行。 -
举个栗子,在 build.gradle 中有以下代码:
task taskOrder1{
doFirst{
println "<< taskOrder1 doFirst 的打印"
}
doLast{
println "<< taskOrder1 doLast 的打印"
}
}
task taskOrder2{
doFirst{
println "<< taskOrder2 doFirst 的打印"
}
doLast{
println "<< taskOrder2 doLast 的打印"
}
}
// taskOrder1.shouldRunAfter(taskOrder2) // 注释1
// taskOrder1.mustRunAfter(taskOrder2) // 注释2
(1) 在命令行中执行命令:gradle taskOrder1 taskOrder2
打印结果:
> Task :taskOrder1
<< taskOrder1 doFirst 的打印
<< taskOrder1 doLast 的打印
> Task :taskOrder2
<< taskOrder2 doFirst 的打印
<< taskOrder2 doLast 的打印
(2) 在命令行中执行命令:gradle taskOrder2 taskOrder1
打印结果:
> Task :taskOrder2
<< taskOrder2 doFirst 的打印
<< taskOrder2 doLast 的打印
> Task :taskOrder1
<< taskOrder1 doFirst 的打印
<< taskOrder1 doLast 的打印
(3) 关闭注释1,打开注释2,测试 shouldRunAfter 语法
在命令行中执行命令:gradle taskOrder1 taskOrder2
或,在命令行中执行命令:gradle taskOrder2 taskOrder1
打印结果:
> Task :taskOrder2
<< taskOrder2 doFirst 的打印
<< taskOrder2 doLast 的打印
> Task :taskOrder1
<< taskOrder1 doFirst 的打印
<< taskOrder1 doLast 的打印
未出现任务乱序的情况
(4) 打开注释1,关闭注释2,测试 mustRunAfter 语法,
在命令行中执行命令:gradle taskOrder1 taskOrder2
或,在命令行中执行命令:gradle taskOrder2 taskOrder1
打印结果:
> Task :taskOrder2
<< taskOrder2 doFirst 的打印
<< taskOrder2 doLast 的打印
> Task :taskOrder1
<< taskOrder1 doFirst 的打印
<< taskOrder1 doLast 的打印
未出现任务乱序的情况
网友评论