参考文章:html
目录segmentfault
cmd: gradle -q [taskname]api
-q 表示不打印输出日志信息。即仅显示结果。闭包
task有两个生命周期,配置阶段和执行阶段。post
1. << (追加) * 在gradle5.0后会被去掉,建议使用doLast代替。学习
即向任务名追加执行过程。gradle
task hello << { println 'hello, this world' }
2. doLast(执行时加载)和doFirst(配置时加载)ui
task hello{ doLast{ println "I'm this last" } doFirst{ println "I'm this first" } }
3. tasksthis
全部的task都存在一个TaskContainer容器中,是Project的属性。可建立task来查看url
task showTask{ println tasks.class println tasks.size() } ------------------------------------------------ class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated 3
4. create
可经过TaskContainer的建立方法来构造task
tasks.create(name:'createTask') { println "i create my task..." }
5.dependsOn
task之间的依赖
tasks.create(name:'createTask',dependsOn:'hello') { println "i create my task..." }
或
[taskname].dependsOn [taskname]
6.task的属性(Properties)定义
每一个task有两个默认的属性 description和 logger,
特定Task会有额外的一些属性(例:Copy有from和to属性)。
使用ext自定义properties
task hello{ doLast{ println hell println hell2 } } hello { ext.hell = "Hell........" ext.hell2 = "Hell2...." description = "description is default's Properties" }
@Optional:表示定义项可选
@TaskAction 表示task要执行的过程
class MyDefineTask extends DefaultTask{ @Optional String message; @TaskAction def hello(){ println "my defined message: $message " } } task helloMy(type: MyDefineTask){ message = "hello world.." } task DefineHello(type: MyDefineTask){ message = " my defined...." }
Gradle在默认状况下已经为Project定义了不少Property,其中比较经常使用的有:
1. 自定义Properties(使用ext):
ext{ pro1="I'm defined pro1" } 或 ext.pro2 = "I'm defined pro2" println pro2
Closure(闭包)是一段单独的代码块,它能够接收参数,返回值,也能够被赋值给变量。即将一段代码段赋值给一个变量,
能够在调用的地方被使用。<< (Closure) 在gradle5.0已经不被使用,Action代替。
Closure cl = { task -> println "I'm $task.project.name"} task hello2 << cl project(':MavenCore') { task hello2 << cl } project(':MavenView') { task hello2 << cl }
Closure cl = {task -> println "I'm $task.project.name"}
task hello2{doLast cl}
Action指一段代码段 ,一个Task由多个Action组成。