持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
我们知道,Task 默认类型都是DefaultTask,我们常用的也都是通过DefaultTask 派生出来的对象。如果我们想自定义Task,那么我们可以通过继承DefaultTask 来实现。
在Gradle中,也有很多特定功能的Task 内置其中,但是它们都间接继承于DefaultTask。我们可以直接在build.gradle 文件中自定义Task。我们知道,action 是task 的最主要的组成部分,它是整个task 中的一个个执行动作。在我们自定义task 的时候,可以使用@TaskAction 来指定一个个action。需要说明的是,在一个task 中如果有多个action,那么这多个action 的执行顺序是根据@TaskAction 注解的方法的逆顺序来执行的。
另外,执行一个Task的过程是:doFirst方法 -> action方法 -> doLast方法。我们在如下示例代码中自定义了TestTask,其中定义了两个action,示例代码如下:
class TestTask extends DefaultTask{
def testMsg = 'test'
@TaskAction
def func1(){
println "func1: $message"
}
@TaskAction
def func2(){
println "func2: $message"
}
}
然后我们定义一个这个task 对象,在定义的时候,通过type 属性来指定Task 的类型,代码如下:
task test1(type: TestTask){
testMsg = 'fist instance'
}
然后我们执行gradle test1 命令,输出结果为:
func2: fist instance
func1: fist instance
从上述代码我们也可以看出,对于我们自定义的Task,其写法和定义一个类差不多。其实自定义的task 本质上就是一个类。
我们除了可以直接在build.gradle 文件中编写自定义Task 之外,还有一些其他方式来自定义Task,这里就不做过多介绍了,读者有兴趣的可以自行查阅并学习。
总结
这篇文章主要介绍的就是如何让用户自定义Task。定义Task 并不难,使用起来也很直观,我们只需要理解并记忆,Task 的默认实现是DefaultTask,我们可以继承DefaultTask 来完成自定义的Task,其本质就是一个类。