本讲继续根据gradle user guide进行学习
1.任务依赖
2.动态任务
3.快捷标记
4.附加的task属性
1.任务依赖:
task intro(dependsOn: hello){
doLast{
println "I'm Gradle"
}
}
task hello{
doLast{
println 'Hello world!'
}
}
输入:wudideMacBook-Pro:gradle ***$ gradle -q intro
Hello world!
I'm Gradle
这里有两点需要说明:
1)所依赖到task不需要在依赖之前声明
2)所依赖的task不一定会先执行,我将代码稍微更改如下:
task intro(dependsOn: hello){
println "I'm Gradle"
}
输入:wudideMacBook-Pro:gradle ***$ gradle -q intro
I'm Gradle
Hello world!
看执行顺序改变了吧,这个的执行顺序与doLast有关,下面来介绍他的作用
task hello{
doFirst{
println 'Hello world first'
}
doLast{
println 'Hello world!'
}
}
task intro(dependsOn: hello){
println "I'm Gradle" //这个永远是最先执行的
doLast{
println 'do last first'
}
doFirst{
println 'do first'
}
doLast{
println 'do last'
}
}
输入:gradle -q intro
I'm Gradle
Hello world first
Hello world!
do first
do last first
do last
总结:1.不加doLast和doFirst的最先执行
2.依赖task优先级高于自己的doFirst和doLast
3.同一个task中的doLast按从上向下顺序执行
4.同一个task中的doFirst按从下到上倒序执行
5.同一个task的doFirst优先级高于doLast
这样是不是就都掌握了吗?在看个例子:
task intro(dependsOn: hello){
println "I'm Gradle"
}
intro.doFirst{
println 'do last first'
}
intro.doFirst{
println 'do first'
}
intro.doLast{
println 'do last'
}
调整了一下结构,但其实结果是相同的,只是把里面的内容拿出来了,这样看着更舒服一些再来改一下:
task intro(dependsOn: hello) << {
println "I'm Gradle"
}
intro.doFirst{
println 'do last first'
}
intro.doFirst{
println 'do first'
}
intro.doLast{
println 'do last'
}
再来看看结果吧:输入:wudideMacBook-Pro:gradle ***$ gradle -q intro
Hello world first
Hello world!
do first
do last first
I'm Gradle
do last
变了,原来 << 的作用是doLast的省略,下面根据上面的介绍在分析一下就知道了吧
2.动态任务
还记得我们之前使用n.times吧,除了作为循环等操作使用以外,还可以做动态任务
4.times{
count -> task "task$count" <<{
println "I'm task number $count"
}
}
输入:wudideMacBook-Pro:gradle ***$ gradle -q task1
I'm task number 1
PS:count这个是你随意制定的变量
3.快捷标记
task notations << {
println 'Hello world!'
}
notations.doLast {
println "Greetings from the $hello.name task." //$hello.name是默认属性,代表task的名字,
}
输入:wudideMacBook-Pro:gradle ***$ gradle -q notations
Hello world!
Greetings from the hello task.
这里介绍了默认的属性,下面再介绍一下如何自定义属性值
4.附加的task属性
task myTask {
ext.myProperty = "myValue" //初始化字符串
ext.myAge = 25 //初始化整形
ext.job = "play"+myAge //初始化运算
}
task printTaskProperties << {
println myTask.myProperty
println myTask.myAge
println myTask.job
}
输入:wudideMacBook-Pro:gradle ***$ gradle -q printTaskProperties
myValue
25
play25
PS:这里的ext是固定的,系统制定的,再自己的task中是可以进行运算的,但不能没有ext