展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

任务定义方式、任务属性、任务类型

任务定义方式

  • 通过 Project 中的 task()方法
task('A',{//任务名称,闭包都作为参数
  println "taskA..."
})

task('B'){//闭包作为最后一个参数可以直接从括号中拿出来
  println "taskB..."
}

task C{//groovy语法支持省略方法括号:上面三种本质是一种
  println "taskC..."
}
def map=new HashMap<String,Object>(); 
map.put("action",{println "taskD.."}) //action属性可以设置为闭包
  • 通过 tasks 对象的 create 或者 register
task(map,"D"); tasks.create('E'){//使用tasks的create方法
  println "taskE.."
}

tasks.register('f'){ //注:register执行的是延迟创建。也即只有当task被需要使用的时候才会被创建。
  println "taskF...."
}

任务属性

  • 案例
//①.F是任务名,前面通过具名参数给map的属性赋值,以参数方式指定任务的属性信息
task(group: "atguigu",description: "this is task B","F")

//②.H是任务名,定义任务的同时,在内部直接指定属性信息
task("H") {
    group("atguigu")
    description("this is the task H")
}

//③.Y是任务名,给已有的任务 在外部直接指定属性信息
task "y"{}
y.group="atguigu"
clean.group("atguigu") //案例:给已有的clean任务重新指定组信息

任务类型

  • 简介
前面我们定义的 task 都是 DefaultTask 类型的,如果要完成某些具体的操作完全需要我们自己去编写 gradle 脚本,
势必有些麻烦,那有没有一些现成的任务类型可以使用呢?有的,Gradle 官网给出了一些现成的任务类型帮助我们快速
完成想要的任务,我们只需要在创建任务的时候,指定当前任务的类型即可,然后即可使用这种类型中的属性和 API 方法了

  • 案例
# 在build.gradle中新建任务
tasks.register('myClean', Delete) {
    delete buildDir 
}

# 在命令行执行 gradle myClean 发现就可以将当前 project 的 build 目录删除
  • 自定义任务类型
def myTask=task MyDefinitionTask (type: CustomTask) 
myTask.doFirst(){
    println "task 执行之前 执行的 doFirst方法" 
}myTask.doLast(){
    println "task 执行之后 执行的 doLast方法" 
}
class CustomTask extends DefaultTask {
    //@TaskAction表示Task本身要执行的方法
    @TaskAction
    def doSelf(){
        println "Task 自身 在执行的in doSelf" 
    }
}

# 命令行测试
gradle MyDefinitionTask

# 输出结果如下

posted @ 2022-08-02 11:46  DogLeftover  阅读(158)  评论(0编辑  收藏  举报