每个Gradle build由一个或多个projects组成,一个project代表用gradle做了什么,比如可能代表了一个JAR库或者一个网页应用程序。
一个project由一个或多个tasks组成,一个Task表示一个逻辑上较为独立的执行过程,比如编译Java源代码,拷贝文件,打包Jar文件,甚至可以是执行一个系统命令或者调用Ant。另外,一个Task可以读取和设置Project的Property以完成特定的操作。
gradle命令在当前路径下寻找一个叫build.gradle的文件夹,也叫做build script,严格来说build configuration script,它定义了project和其tasks.
一、HelloWorld
1、调用Project的task()方法
在build.gradle中
task hello << {
println 'Hello world!'
}
其中<<
表示向hello中加入执行代码。大括号之间的内容则表示传递给task()方法的一个闭包。
2、使用doLast加入执行过程
task hello {
doLast {
println 'Hello world!'
}
}
3、create方式
tasks.create(name: 'hello') << {
println 'Hello world!'
}
4、运行,结果
在terminal中输入 gradle -q hello
其中,-q
作用是隐藏了日志信息,使其只显示tasks的输出,可以选择使用。
$ gradle -q hello
Hello world!
二、使用Grovvy
eg1:
build.gradle:
task upper << {
String someString = 'mY_nAmE'
println "Original: " + someString
println "Upper case: " + someString.toUpperCase()
}
Terminal:
$ gradle -q upper
Original: mY_nAmE
Upper case: MY_NAME
eg2:
build.gradle:
task count << {
4.times { print "$it " }
}
Terminal:
$ gradle -q count
0 1 2 3
三、task依赖
taskA依赖于taskB,那么在执行taskA时,Gradle会先执行taskB,然后再执行taskA。
1、声明Task依赖关系的一种方式是在定义一个Task的时候:
build.gradle:
task taskX << {
println 'taskY!'
}
task taskY(dependsOn: taskX){
println "taskX!"
}
Terminal:
> gradle -q taskY
taskX
taskY
2、被依赖的Task还不存在的时候
在写depondsOn时候,对被依赖的task加上引号'task'
build.gradle:
task taskX(dependsOn: 'taskY') << {
println 'taskX'
}
task taskY << {
println 'taskY'
}
Terminal:
$ gradle -q taskX
taskY
taskX
3、Example
gradle.build
task branch << {
println "use version=$version"
}
task myTask(dependsOn: 'mybranch') << {
println 'this is my task!'
}
gradle.taskGraph.whenReady {taskGraph ->
if (taskGraph.hasTask(myTask)) {
version = '1.0'
} else {
version = '2.0'
}
}
Terminal:
$ gradle -q branch
use version=2.0
$ gradle -q myTask
use version=1.0
this is my task!
四、动态task
build.gradle:
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
Terminal:
$ gradle -q task1
I'm task number 1
注意,task是从0开始的,即此处存在task0、task1、task2、task3。可输入gradle tasks
查看所有task。
五、操控现有task
1、添加依赖
build.gradle:
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
task0.dependsOn task2, task3
Terminal:
$ gradle -q task0
I'm task number 2
I'm task number 3
I'm task number 0
2、添加行为
build.gradle:
task hello << {
println 'Hello world!'
}
hello.doFirst {
println 'Hello first'
}
hello.doLast {
println 'Hello last'
}
hello << {
println 'Hello hello!'
}
Terminal:
$ gradle -q hello
Hello first
Hello world!
Hello last
Hello hello!
六、默认task
build.gradle:
defaultTasks 'clean', 'run'
task clean << {
println 'Default Cleaning!'
}
task run << {
println 'Default Running!'
}
task other << {
println "I'm not a default task!"
}
Terminal:
$ gradle -q
Default Cleaning!
Default Running!