安装
Gradle需要jdk1.5以上的安装环境,Gradle装配了自己的Groovy库,所以无需安装Groovy,配置GRADLE_HOME以及PATH
gradle -v 测试安装成功与否

Project与Task
每一个Gradle的配置都是由一个或多个Project组成,Project的含义取决于你用Gradle来做什么,一个Project可能代表一个Jar library 或者一个web应用或者一个zip压缩包,一个Project并不一定代表一个即将被构建的项目,
也可能代表一个已经被构建好的项目。
每一个Project由一个或多个Task组成,一个Task代表一些原子性的构建工作,可能是编译代码,打jar包,生成java文档,或者发布一些归档信息到一个repository。
Hello World
用命令行运行Gradle构建的时候,会在当前目录下寻找一个名为build.gradle的文件
在这个build script里定义了一个名为hello的task,当你运行gradle hello命令时gradle就会执行hello这个task里面的内容,这样定义的方式与Ant中target十分相似,Gradle中的task可以等价于Ant中的target
task hello { doLast{ println "Hello World!" } }
运行gradle -q hello 得到如下结果(-q选型时关闭gradle日志信息,直接使用gradle hello也可以得到相同的结果,但会打印出一些Gradle的日志)

一种更简洁的hello task定义方式,输出结果与上述方式结果一致
task hello << {
println 'Hello World'
}
Task依赖
task hello << {
println 'Hello World'
}
task intro(dependsOn: hello) << {
println "I'm Gradle"
}

依赖与被依赖task的定义顺序可以颠倒
task taskX(dependsOn: 'taskY') << {
println "taskX"
}
task taskY << {
println "taskY"
}
动态Task
4.times {
counter ->
task "task$counter" <<{
println "I'm task number $counter"
}
}

操作已经存在的Task
一旦一个task被创建了那么他们就可以被API访问,这一点与Ant不同
4.times {
counter ->
task "task$counter" <<{
println "I'm task number $counter"
}
}
task0.dependsOn task2, task3

task hello << {
println 'Hello Earth'
}
hello.doFirst {
println "Hello Venus"
}
hello.doLast {
println "Hello Mars"
}
hello << {
println "Hello Jupiter"
}

doFirst和doLast可以被定义并执行多次(定义同样的操作类型则按照定义的顺序执行) hello << 等价于hello.doLast

额外的Task配置
你可以通过ext.设置task的额外属性
task myTask {
ext.myProperty = "myValue"
}
task printTaskProperties <<{
println myTask.myProperty
}

定义默认任务
defaultTasks 'clean', 'run'
task clean << {
println "Default Cleaning!"
}
task run << {
println "Default Running!"
}

相当于执行gradle clean run 命令
在多工程构建中每一个子项目都可以拥有其默认的任务,如果一个子项目没有指定其默认的任务,那么就会执行其父项目的默认任务(如果父项目中定义的话)
gradle有配置阶段以及执行阶段,在配置阶段之后Gradle会知道将要被执行的所有任务,Gradle给你提供一个“钩子”来让你使用这些信息
下面这个例子阐述了release task是不是被执行的task之一,根据结果你可以分配不同的值给不同的变量
task distribution << {
println "We build the zip with version=$version"
}
task release(dependsOn: 'distribution') <<{
println "We release now"
}
gradle.taskGraph.whenReady {
taskGraph ->
if(taskGraph.hasTask(release)) {
version = "1.0"
} else {
version = "1.0-SNAPSHOT"
}
}

当release task被执行的时候version = "1.0" 没被执行的时候 version = "1.0-SNAPSHOT"