Task的介绍

Task

1. 简述

如下代码,执行 monk2 task:

task monk{
    println '生命周期第2阶段,配置阶段'
    doFirst {
        println '生命周期第3阶段,执行阶段,开始'
    }
    doLast {
        println '生命周期第3阶段,执行阶段,结束'
    }
}
task monk2(dependsOn:"monk")
/*
> Configure project :
生命周期第2阶段,配置阶段

如果app/build.gradle,有相关task,会按照相关生命周期先执行
> Configure project :app
============== scriptClosure this: project ':app'
============== scriptClosure owner: project ':app'
============== scriptClosure delegate: project ':app'

> Task :monk
生命周期第3阶段,执行阶段,开始
生命周期第3阶段,执行阶段,结束

> Task :monk2
*/

两个 task,都可以单独执行。monk2 task 依赖于 monk task,意思是执行 monk2 时候,必须先执行完 monk 后才能执行,类似方法调用,这样它们之间组成了一个有向无环图:monk task ==> monk2 task

doFirst:表示 task 执行最开始的时候,被调用;doLast:表示 task 执行完的时候,被调用;这两个可以被执行多次

2. 属性

常见的一些属性有:

package org.gradle.api;

public interface Task extends Comparable<Task>, ExtensionAware {
    String TASK_NAME = "name";
    String TASK_DESCRIPTION = "description";
    String TASK_GROUP = "group";
    String TASK_TYPE = "type";
    String TASK_DEPENDS_ON = "dependsOn";
    String TASK_OVERWRITE = "overwrite";
    String TASK_ACTION = "action";
    String TASK_CONSTRUCTOR_ARGS = "constructorArgs";
}
// root -> build.gradle
task myTask{
     ext.customproperty = "customproperty"
}
task myTask2{
    doLast {
        // 1. 可以使用 $ 符号引用另一个 task 的属性
        println "myTask name is ${myTask.name}"
        // 2. 可以使用 ext 自定义属性
         println "myTask name is ${myTask.customproperty}"
    }
}
/*
> Task :myTask2
myTask name is myTask
myTask ext.customproperty is customproperty
*/

3. 执行详解

task 一般使用 doFirstdoLast两个方法用于在执行期间进行操作,示例代码如下

// root -> build.gradle
task myTask{
    println 'this is mytask'
    doFirst {
        println 'do first'
    }
    doLast {
        println 'do last'
    }
}

myTask.doFirst{
    println 'out do first'
}
/*
> Configure project :
this is mytask

> Task :myTask
out do first
do first
do last
*/

实战可参考连接中 计算build执行期间的耗时,届时可以分享代码到 blog

还可以参考连接中 自动维护版本发布文档的 gradle 脚本,届时也可以分享代码到 blog

4. 类型

除了定义一个新的 task 之外,我们也可以使用type属性直接使用一个已有的 task 类型,比如 gradle 自带的 copy、delete、sync 等

task clean(type:Delete){
    delete rootProject.buildDir
}
task copyDocs(type:Copy){
    from 'src/man/doc'
    into 'build/target/doc'
}
// 执行时会复制源文件到目标目录,然后从目标目录删除所有非复制文件
task syncFile(type:Sync){
    from 'src/main/doc'
    into 'build/target/doc'
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值