Gradle之定义Task

1 Task

Task可以理解为Gradle的执行单元,实在是太重要了。根据前面的分析,Gradle通过一个个task来完成具体的构建任务,下面我们来看下Task的定义。最简单直接,通过如下方式来定义:

task myTask {
    println "config myTask"
}

// 执行下

D:\0.GitHub\seniorlibs> gradlew myTask

config myTask

2 执行

task myTask {
    println "config myTask"
}
// 执行的最开始和最后做了一些事情
myTask.doFirst {
    println "before execute myTask"
}
// doLast还有一个等价的操作leftShift,leftShift还可以缩写为<<,下面的三种实现效果等价:
myTask.doLast {
    println "after1 execute myTask"
}
myTask.leftShift {
    println "after2 execute myTask"
}
myTask << {
    println "after3 execute myTask"
}
// 1、通过gradlew myTask来查看:
// > Configure project :gradles
// config myTask
// > Task :gradles:myTask
// before execute myTask
// after1 execute myTask
// after2 execute myTask
// after3 execute myTask

// 下面三种定义也一模一样
// task myTask1 << {
//    println "after execute myTask1"
// }
// task('myTask1').doLast { // project.task('myTask1').doLast
//    println "after execute myTask1"
// }
// tasks.create('myTask1').doLast { // project.tasks.create('myTask1').doLast
//    println "after execute myTask1"
// }

// 定义Task的时候是可以指定很多参数
task myTask2 << {
    println "execute myTask1"
}
task myTask3 << {
    println "execute myTask2"
}
// 定义一个名字为myTask4的task,属于guan分组,并且依赖myTask1和myTask2两个task。
task('myTask4', group: "guan", description: "我自己的Task", dependsOn: ["myTask2", "myTask3"] ).doLast {
    println "execute myTask4"
}
// 1、通过gradlew tasks来查看:
// Guan tasks
// ----------
// myTask4 - 我自己的Task
//
// Help tasks
// ----------
// 2、通过gradlew myTask4来查看:
// > Task :gradles:myTask2
// execute myTask1
// > Task :gradles:myTask3
// execute myTask2
// > Task :gradles:myTask4
// execute myTask4

class RygTask extends DefaultTask {
    String message = 'This is RygTask'

    // @TaskAction 表示该Task要执行的动作,即在调用该Task时,hello()方法将被执行
    @TaskAction
    def hello(){
        println "hello. $message"
    }
}
// hello使用了默认的message值
task hello(type:RygTask)
// 重新设置了message的值
task hello1(type:RygTask){
    message ="hello1. I am an android developer"
}
// 1、通过gradlew hello hello1来查看:
// > Task :gradles:hello
// hello. This is RygTask
// > Task :gradles:hello1
// hello. hello1. I am an android developer

// 继承自系统已有的Task的Task:"Copy"来完成文件的拷贝操作,还有:Copy、Delete、Sync等
task copyTask(type:Copy) {
    println "copyTask type: Copy"
}
// 1、通过gradlew myTask来查看:
// > Configure project :gradles
// copyTask type: Copy

3 可配置的插件Extension

Gradle的Extension,翻译叫扩展,通过ExtensionContainer来创建并管理Extension。

// 先定义一个普通的java类,包含2个属性
class StatExtension {
    public boolean debug = false
}
class StatPlugin implements Plugin<Project> {
	@Override
	void apply(Project project) {
		// 2种方法创建一个名为statPluginConfig的Extension
		// getExtensions().create("statPluginConfig", StatExtension)
		StatExtension extension = project.extensions.create("statPluginConfig", StatExtension, args)
		println extension.debug
     }
}
// 在gradle中配置Extension
statPluginConfig {
    debug = true
}

// Task可以理解为Gradle的执行单元
// 这个类与TaskContainer命名有点类似,TaskContainer是用来创建并管理Task的
task testExt {
    // 在gradle中,能直接通过 project 获取到自定义的Extension
    println project.statPluginConfig
}

6 学习链接

全面理解Gradle - 定义Task

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值