8、Task

作者: 最美下雨天 | 来源:发表于2019-04-06 23:27 被阅读0次

本节内容:

  • Task定义及配置
  • Task执行详解
  • Task的依赖和执行顺序
  • Task类型
  • 挂接到构建生命周期
  • Task实战

Task定义

两种定义方式:
1、直接通过task函数去创建

task taskname{
    println 'this is a task'
}

2、通过project的TaskContainer去创建Task

//调用tasks会返回一个TaskContainer
tasks.create('name')
        {
            println 'this is a task'
        }

创建task的时候可以同时去指定task的一些属性,比如说group、description等

task taskname(group:'这是组名',description:'描述信息'){
    println 'this is a task'
}
image.png task的一些属性

3、doFirst、doLast

//调用tasks会返回一个TaskContainer
tasks.create('one')
        {
            doFirst {
                println  "one测试doFirst运行"
            }

            doLast {
                println 'one测试doLast运行'
            }
            println 'this is a one task'
        }

tasks.create('two')
        {
            doFirst {
                println 'two测试doFirst运行'
            }
            doLast {
                println 'two测试doLast运行'
            }

            println 'this is a two task'
        }
测试doFist、doLast执行时机

可以看到:


配置阶段执行的

这两句是在执行阶段输出的


执行阶段输出的

测试发现需要写在主module的gradle文件中,写在项目中的gradle文件中会报错

//计算build这个task的执行时间
//build执行的时候第一个任务是prebuild,最后执行的是build

def startTime
def endTime
this.afterEvaluate {
    Project project->
        //写在afterEvaluate中,保证所有的task已经配置完毕
        project.tasks.getByName('preBuild').doFirst {
            startTime=System.currentTimeMillis()
            println "the start time is ${startTime}"
        }

        tasks.getByName('build').doLast {
            endTime=System.currentTimeMillis()
            println "the total time is ${endTime-startTime}"
        }
}
image.png

4、Task之间的依赖

task taskname{
    doLast {
        println 'this is a task'
    }
}


task taskA{
    doLast {
        println 'task a'
    }
}

task taskB{
    doLast {
        println 'task b'
    }
}

task taskC(dependsOn:[taskA,taskB]){
    doLast {
        println 'task c'
    }
}

还有一种指定方式:taskC.dependsOn(taskA,taskB)

指定需要依赖的任务时可以指定一些条件:

task lib1{
    doLast {
        println 'task lib1'
    }
}

task taskC(){
    dependsOn this.tasks.findAll {
        return it.name.startsWith('lib')
    }
    doLast {
        println 'task c'
    }
}

实现功能:解析releases.xml文件,将文件中每一个对应的节点release生成一个text文件,存放于generated下的release目录中


image.png
task handleReleaseFile{
    //定义要被解析的xml文件
    def srcFile=file('releases.xml')
    def destDir=new File(this.buildDir,'generated/release/')
    doLast {
        println '开始解析xml文件'
        //目录没有的话必须先新建一个,区别于文件,文件如果是写入的话,不需要判断有没有
        destDir.mkdir()
        def releases=new XmlParser().parse(srcFile)
        releases.release.each{
            def name=it.versionCode.text()
            def code=it.versionName.text()
            def desc=it.versionInfo.text()
            //创建文件并写入节点信息
            def destFile=new File(destDir,"release-${name}.text")
            destFile.withWriter {
                it.write("${name}->${code}->${desc}")
            }

        }
    }
}

5、Task的输入输出


image.png

简而言之:一个任务的输出可以作为另一个文件的输入

例子省略了,哈哈哈

6、将自定义的task挂接到系统task之后

task customeTask{
    doLast{
        println '测试自定义任务挂接到系统任务后'
    }
}


this.afterEvaluate {
    Project project->
        //写在afterEvaluate中,保证所有的task已经配置完毕
        tasks.getByName('build').doLast {
            customeTask.execute()
        }
}

相关文章

  • Task 8

    块级元素和行内元素分别有哪些? 块级元素: 惯例,先上MDN链接:MDN —— Block-level-eleme...

  • 8、Task

    本节内容: Task定义及配置 Task执行详解 Task的依赖和执行顺序 Task类型 挂接到构建生命周期 Ta...

  • NodeJs event loop

    V8有个task queue,IO event,timeout,interval事件会往task queue放入c...

  • Item 45: Use streams judiciously

    The streams API was added in Java 8 to ease the task of p...

  • task8

    对于行内元素来说,上下margin padding是不生效的,只有左右才有效。 font 有各种各样的属性,第一个...

  • task8

    问答 为何img、input等内联元素可设置宽高 1. 块级元素和行内元素分别有哪些?动手测试并列出4条以上的...

  • Task8

    1.css常见的选择器有几种 id选择器 class选择器 分组选择器 属性选择器 派生选择器 伪类选择器 2.选...

  • task8

    1.块级元素和行内元素分别有哪些?动手测试并列出4条以上的特性区别 block: div h(1-6) p hr ...

  • task8

    题目1: dom对象的innerText和innerHTML有什么区别? innerText只返回子元素标签内部的...

  • task8

    1、块级元素和行内元素分别有哪些?动手测试并列出4条以上的特性区别。 块级元素:h1~h6, p, ul, ol,...

网友评论

      本文标题:8、Task

      本文链接:https://www.haomeiwen.com/subject/gofjbqtx.html