您的位置:首页 > 其它

Gradle学习笔记(四)

2015-12-28 21:14 274 查看

上一篇日志,我们搞清楚了基础的概念以及Hello World,接下来我们继续学习Gradle。

构建脚本代码:
Gradle构建脚本将向你展示Groovy的所有出色的功能,接下来看看它强大的功能:
Example:在Gradle的任务(tasks)中使用Groovy语言
build.gradle
task upper <<{
String str = 'gradle and groovy'
println "Original:"+str
println "Upper case:"+str.toUpperCase()
}


保存文件,输入命令行:gradle -q  upper
运行完之后将会输出:
Original:  gradle and groovy
Upper case:  GRADLE AND GROOVY
或者看看这个例子:
task count <<{
4.times {print "$it "}
}
注意4后面是  . (英文句 号)。
保存文件,输入命令行:gradle -q  count

将会输出:0  1  2   3

任务依赖:
就像你猜想的那样,你可以声明一个任务,而这个任务依赖于其他的任务。
Example:
build.gradle
task hello <<{
println 'Hello World'
}
task intro(dependsOn:hello) << {
println "I'm Gradle";
}

注意:第二个输出使用双引号引起来的,因为 I 后面有一个单引号。
保存文件,输入命令行:gradle -q  intro
将会输出:
Hello World

Im Gradle

解释:因为intro 依赖 hello,所以输入命令执行intro 时会先执行它的依赖 hello。
再加入一个依赖之前,这个依赖任务不需要提前定义,接下来看一个例子:
build.gradle
task taskX(dependsOn:'taskY') << {
println 'taskX';
}
task taskY << {
println "taskY"
}
保存文件,输入命令行:gradle -q  taskX
将会输出:

taskY

taskX

注意:有人会注意到如果去掉  task taskX(dependsOn:'taskY')  中 taskY 的引号,还能不能得到正确的结果,笔者经过实战,发现去掉之后执行脚本会报以下错误:



根据笔者的经验,可能是因为加了 引号 ,在进行任务依赖时会查找整个build.gradle 文件,而如果不使用引号,那么依赖taskY必须先于taskX 定义。(笔者实验过把taskY定义在前面,发现可以正确执行)

taskX与taskY之间的依赖,在taskY定义之前就声明好了,这一点对我们后面的多任务构建非常重要,更多的任务依赖详情将会在后面进一步讨论。
请注意,当所关联的任务还没有定义时,你不能使用快捷的去依赖一个任务。(这句话的意思可能就是在上面提到的加引号和不加引号的区别)
动态任务(Dynamic tasks)
Groovy 的强大功能不仅仅用于定义一个任务应该干什么。例如,它可以用来动态的创建任务:
build.gradle
4.times{ counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
保存文件,输入命令行:gradle -q  task1

会输出:
>gradle -q task1

I'm task number 1

操纵已经存在的任务(Manipulating existing tasks)
一旦一个任务创建了,可以通过一个API 来访问它。例如:你可用用它来在运行时动态的为一个任务添加依赖。而 Ant 却没有这样的 功能。
build.gradle
4.times{ counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
task0.dependsOn task2,task3
gradle -q   task0的输出为:
gradle -q task0

I'm task number 2

I'm task number 3

I'm task number 0

或者你可以给一个存在的任务添加行为,例子如下:
build.gradle
task hello << {
println 'Hello Earth'
}
hello.doFirst{
println 'Hello Venus'
}
hello.doLast{
println 'Hello Mars'
}
hello << {
println 'Hello Jupiter'
}
执行命令 gradle  -q  hello 的结果如下:
>gradle -q hello

Hello Venus

Hello Earth

Hello Mars

Hello Jupiter

doFirst和doLast的调用可以执行多次,它们的调用会在相应任务的动作列表的开头和结尾加入一个动作,当一个任务执行的时候,会按顺序依次执行动作列表中的各个动作。操作符 <<   相当于是  doLast的一个别名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gradle groovy