update time: 2019-1-10 Author:要你命三千又三千 type:学习笔记
文章目录
问题一:如何创建一个任务
多种方式创建任务简介
方法一:task(name)
使用task()方法来创建对象
def Task ex41CreateTask1=task(ex41CreateTask1)//创建一个任务调用task()方法
ex41CreateTask1.doLast { //为其配置doLast 方法。
println "创建方法的原型为 :Task task(String name) throws InvalidUserDataException"
}//
方法二 task(参数1,map(task配置))
使用Map对象来补充一个配置(同样使用task 创建,但是多配置一个Map配置参数对象)
def Task ex41CreateTask2=task(ex41CreateTask2,group:BasePlugin.BULLD_GROUP)
....同上
//补充说明这个Map可用配置有
方法三:任务名+闭包配置(参数)
task ex41CreateTask3 {
doLast{//闭包中的委托对象(delegate)就是Task .
println '创建方法原型:Task task(String name,Closure configureClousure)"
}
总结:以上方法task ()都是调用taskContainer 来创建任务的。
方法四:使用原生方法tasks.create(name){}
//tasks 是project的对象属性 ,类型为:TaskContainer.
tasks.create('ex41Create4') {
doLast { //这里必须理解的是doLast 是一个方法,后面的闭包是doLast(closure )
// 的参数 ,拿到括号外面区,省略括号。
println '创建方法为:task create(string name,closure configureClosure) throws InvalidUserDataException"
}
}
问题二 :访问任务(task)
2.1 直接通过任务名来访问任务和操纵任务
2.3 通过project的(集合)tasks属性,来访问任务对象
task ex42AccessTask2
task['ex42AccessTask2'].doLast{
.....
}//解释这里的[] 是一个groovy 包装的运算符,相当于(tasks.getAt("ex42AccessTask2"))
2.4 根据路径方位,根据名称访问
问题:findbyPath()中的参数如何确定?待解答(这里我自己是用相对路径写的,绝对路径如何写)
运行结果
任务分组与描述
作用:便于任务识别与归类整理。
解释
分组:实质就是任务进行分类
描述:就是添加说明信息
操作:如何添加
def task myTask=task ec43Grouptask
//添加分组
myTask.group =BasePlugin.BULLD_GROUP
myTask,description="这是一个构建的引导任务"
在build.gradle 添加以下两行命令
任务的结果为
在AS IDE 中的效果图为
鼠标悬停即可显示任务描述(任务说明信息)
一个问题补充:<<的含义
groovy 中“<< ” 是leftshift()的重载操作(这里的含义就是doLast方法,都是将对象(doLast动作对象,list集合对象)放在最后)
与以下方法同义
问题如何理解一个task 的执行过程
结构:list类型的actions属性 存放动作。
这里根据描述大概含义模拟得出的结构(真正的结构肯定比这个复杂)
Task{ //task 是一个类型(类)
private List<ContextAwareTaskAction> actions= new ArrayList<>();//actions是
//一个action的列表(ContextAwareTaskAction是action包装后传递给它的)参数
......
public Task doFirst(final Closure action){
......
public void run(){
actions.add(0,action);//将doFirst 传递的闭包加入列表的第一个位置
}
.....
}
public task doLast(final Closure action){}
//同理doLast()的闭包参数加入到actions的最后。(这里的参数就是doLast后的闭包,这里
//是省略语法)
}
//补充添加到actions时机:task 本生的action,在定义使用Map 来配置参数时天添加。
//**关键**:在创建task 添加自己的Map参数的中配置的action
关键字:task加入到actions列表中,执行actions 的对象。
doFirst()添加到第一位,doLast()添加到最后一位。
任务排序(任务之间的关系,上一个是action的执行顺序在action内部)
本质: 控制一个任务应该或者一定在某个任务后执行(从而达到一定程度的控制任务执行顺序,而不是仅仅通过dependsOn的方式)
如何用
taskB.shouldRunAfter(taskA)----b应该运行在a之后执行(非必须,有可能无效(a在b之后运行))
taskB.mustRunAfter(taskA)表示taskB必须在taskA之后执行(必须)
举例:如何使用mustRunAfter()
运行结果是
任务的启用与禁止
使用enable 属性来,在调用此任务时是判断是否跳过
enable属性需要在执行到具体的逻辑的时候进行判断设置。
mytask.enable =“true”(启用任务)
mytask.enable=“false”(禁止此任务,在执行到任务后会进行SKIPPED(跳过))
类似使用onlyif{}方法(通过提前设置条件来判断是否执行)
任务规则(了解即可)
待补充
作用:目前只是知道用来处理一些异常情况
举例:
在使用tasks.findByName()方法时,如果任务不存在,则调用规则进行处理异常。