task
Gradle有两个最基本的概念:project和task,Gradle里面的所有东西都基于这两个概念。project通常指一个项目,而task指构建过程中的任务。一次构建可以有1到n个project,每个project有1到n个task.
每个新创建的任务都是org.gradle.api.DefaultTask类型,org.gradle.api.Task的标准实现,DefaultTask所有的域都是私有的,意味着他们只能通过setter和getter方法来访问.
声明任务的动作(actions)
动作就是在你的任务中放置构建逻辑的地方,Task接口提供了两个接口来声明任务的动作: doFirst和doLast,当任务执行的时候,定义在闭包里的动作逻辑就按顺序执行。
version = '0.1-SNAPSHOT'
task printVersion {
doLast {
println "Version: $version"
}
}
执行命令gradle printVersion
:printVersion
Version: 0.1-SNAPSHOT
左移操作符是方法doLast的快捷键
给已经存在的任务添加动作:
printVersion.doFirst { println "First action" }
task定义和依赖关系
//task定义
task hello1 <<{
println("hello1")
}
task world1 << {
println("world1")
}
//依赖关系,world1依赖hello1
world1.dependsOn hello1
//依赖关系,world2依赖hello1
task world2(dependsOn:'hello1') << {
println("world2")
}
//依赖关系,通过Project对象getTasks()方法获取项目的TaskContainer对象,然后进行过滤
task world3 <<{
println("world3")
}
world3.dependsOn{
tasks.findAll {
it.name.contains("1")
}
}
//直接获取project中的TaskContainer对象,调用起create()方法
tasks.create(name:'copy',type:Copy){
println(project.projectDir.path + "/build.gradle")
from(project.projectDir)
into(project.buildDir)
description 'copy.s desc'
}
跳过task
//调用task对应的onlyIf()方法
taskname.onlyIf{expression == true}
禁用task
taskname.enabled=true