看过一个实际的Groovy工程样板之后,是时候了解一些基础知识了。
首先是下载安装,这个并没有什么新鲜的东西:
- 下载:地址
- 解压并设置你的环境变量:GRADLE_HOME=你的解压路径,确保path中包含了%GRADLE_HOME%/bin
- 测试安装成功,在命令行输入:gradle。
其次是如何在工程中使用:
- 创建工程目录,大多数情况下,遵循惯例是最简单的做法。前文已经列出了Java插件和Groovy插件的惯例,不了解或者是忘了的,请移步观之。
- 在工程的根目录,创建build.gradle,这一点类似ant。
- 运行定义在build.gradle中的任务:gradle 任务。
现在该说说重点了:构建脚本。前文说过,Gradle的构建脚本实际是groovy代码,其核心task,就是groovy中的闭包。在本系列开篇的例子中已经展示了它的写法。但是,为了遵循老传统,这里还是再啰嗦一下(摘自Gradle的用户指南):
task hello << {
println 'Hello world!'
}
运行:gradle hello。
在任务中,你可以向平常一样书写groovy代码,同时还可以使用gradle内置对象及其方法,象前文的ant以及captureStandardOutput方法,都属此类。
和ant一样,task之间可以有依赖关系,被依赖的先运行,然后才是依赖者。通过dependsOn属性来指定:task run(dependsOn: classes){……}。
任务一旦定义之后,你便可以象使用其它变量一样使用它,这充分体现了gradle的动态性。如上例,你可以直接使用hello来引用那个任务,它的类型是Task。你可以给它添加属性和行为,以备后用。如果你想在任务的执行前后做点小动作,doFirst和doLast是你最好的选择(摘自Gradle的用户指南):
task hello << {
println 'Hello Earth'
}
hello.doFirst {
println 'Hello Venus'
}
hello.doLast {
println 'Hello Mars'
}
hello << {
println 'Hello Jupiter'
}
最后一个相当于直接给doLast添加。此外,如果是对整个工程而言,而非对单个任务,那么你可以直接在build.gradle中书写groovy脚本。这种做法,相当于全局的doFirst。以下摘自我的Android工程的gradle文件,每次build前删除工程中的.bak。原因是,对于资源文件,Android似乎不加区别的对该目录(res)下的所有文件进行处理,而不是判断其是否为xml文件。而象UE这样的文本编辑器的一个特性是对修改文件产生一个.bak,这就导致Android发现重复的资源id。而我觉得这个UE特性有时还是有用的,不想设成关闭。所以就采用了“特事特办”的做法:
ant.echo 'delete .bak files ...'
ant.delete{
fileset(dir:'.', includes:'**/*.bak')
}
以上代码完全在任何task之外。
到现在为止,各位应该看出ant在gradle中的重要性,这让我们依旧还可以利用之前的ant经验。但能否直接利用ant的build逻辑呢?这个,完全不成问题。只消一句话即可。下面的代码同样摘自我的Android工程的gradle文件:
ant.importBuild 'build.xml'
这里顺便再说些题外话。如果使用Eclipse的Android插件进行开发,创建工程并不会出现这个build.xml。但是如果你完全使用命令行方式,即使有“android create project”,则就会出现。以上做法是直接向工程引入gradle的最简方式,即享受了gradle的好处,也不必对原来的东西大动干戈。现在启动模拟器,然后输入“gradle install”,便可向其中加载你的Android应用了。
其它一些值得注意的技巧:
- 动态创建任务(摘自Gradle的用户指南):
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
本系列的其它部分:

版本
应该说明用的是什么版本的Gradle,因为Gradle的API还没稳定下来,版本于版本之间的API还是有一些区别的
gradle 0.8
谢谢提醒,目前0.9尚未正式发布,本系列都是以0.8为准。