北海做网站哪家好外链群发
task执行顺序dependsOn
一个 Task 是由一序列 Action (动作)组成的,当运行一个 Task 的时候,这个 Task 里的 Action 序列会按顺序依次执行。
doFirst\doLast之外的代码只是配置代码,它们并不是 Action ,Task 里的 Action 只会在该 Task 真正运行时执行,Gradle 里通过 doFirst、doLast 来为 Task 增加 Action 。
-
doFirst:task执行时最先执行的操作
-
doLast:task执行时最后执行的操作
-
task内除了doFirst、doLast之外都是配置时执行
配置顺序:从上到下
task内执行顺序:doFirst -> doLast
task间可以通过mustRunAfter vs dependsOn vs finalizedBy调整顺序
-
dependsOn - 设置任务依赖关系。
-
mustRunAfter - 设置任务执行顺序。
-
finalizedBy - 为任务添加一个当前任务结束后立马执行的任务
测试: 定义task1、task2、task3、task4,并让他们按照4321的顺序执行
task task2 {sleep 1000println "=====task2====="doFirst {sleep 1000println "=====task2 first====="}doLast {sleep 1000println "=====task2 last====="}
}task task4 {sleep 1000println "=====task4====="doFirst {sleep 1000println "=====task4 first====="}doLast {sleep 1000println "=====task4 last====="}
}task task3 {sleep 1000println "=====task3====="doFirst {sleep 1000println "=====task3 first====="}doLast {sleep 1000println "=====task3 last====="}
}task task1() {//configuretask3.dependsOn task4task2.dependsOn task3task1.dependsOn task2//configureprintln "=====task1====="//actiondoFirst {println "=====task1 first====="}//actiondoLast {println "=====task1 last====="}
}
//
//Executing tasks: [task1]
//
//
//> Configure project :app
//=====task2=====
//=====task4=====
//=====task3=====
//=====task1=====
//
//> Task :app:task4
//=====task4 first=====
//=====task4 last=====
//
//> Task :app:task3
//=====task3 first=====
//=====task3 last=====
//
//> Task :app:task2
//=====task2 first=====
//=====task2 last=====
//
//> Task :app:task1
//=====task1 first=====
//=====task1 last=====
自定义Task类
//自定义Task类,必须继承自DefaultTask
class SayHelloTask extends DefaultTask {String msg = "default name"int age = 18//构造函数必须用@Inject注解标识@InjectSayHelloTask(int age) {this.age = age}//通过@TaskAction注解来标识该Task要执行的动作@TaskActionvoid sayHello() {println "Hello $msg ! age is ${age}"}}//通过constructorArgs参数来指定构造函数的参数值
task hello1(type: SayHelloTask, constructorArgs: [30])//通过type参数指定task的父类,可以在配置代码里修改父类的属性
task hello2(type: SayHelloTask, constructorArgs: [18]) {//配置代码里修改 SayHelloTask 里的字段 msg 的值msg = "xq"age = 25
}