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" } }gradle -q task0的输出为:
task0.dependsOn task2,task3
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的一个别名。
相关文章推荐
- SourceProvider.getJniDirectories
- 执行失败的任务 ': processDebugManifest'
- Android Studio使用教程(六):Gradle多渠道打包
- Android Studio使用教程(四):Gradle基础
- Android Studio使用教程(五):Gradle命令详解和导入第三方包
- Groovy编程入门攻略
- Win7安装gradle
- Groovy Meta Object Protocol
- 关于Android Studio 和 Gradle的那些事儿
- Gradle这个黑盒子
- 用groovy写H2数据库的存储过程
- groovy实现JSONRPC
- Groovy 循环语法
- groovy中List集合的使用
- maven用户试用gradle
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序-依赖管理篇
- Gradle 构建 android 应用常见问题解决指南
- Adnroid Studio Gradle 多渠道打包
- Gradle,构建工具的未来?