gradle(5)-task(2)

//task依赖:task输入输出TaskInput TaskOutput对应task的两个属性inputs,outputs.

 // wirteTask和readTask通过共同操作的属性destFile关联了起来

 //gradle 规定输出属性对应的task会(生产者)先执行,输入属性对应的task后执行

ext{

    versionName='1.0.0'

    versionCode='10'

    versionInfo='App的第一个版本'

    destFile=file('realease.xml')

    if(destFile!=null && destFile.exists()){

         destFile.createNewFile()

    }

}

###//输出文件

task writeTask{

    ####//为task指定输入

    inputs.property('versionCode',this.versionCode)

    inputs.property('versionName',this.versionName)

    inputs.property('versionInfo',this.versionInfo)

    outputs.file destFile

    doLast{

    def data=inputs.getProperties()

    File file=outputs.getFiels().getSingleFile()

    ####//将map转化为实体对象

     def versionMsg=new VersionMsg(data);

     #### //将实体数据转换成xml格式数据

     def sw=new StringWriter()

    def xmlBuilder=new MarkupBuilder(sw);

    if(file.text!=null && file.text.size()<=0){//文件中没有内容

            xmlBuilder.releases{

                    release{

                            versionCode(versionMsg.versionCode)

                            versionName(versionMsg.versionName)

                            versionInfo(versionMsg.versionInfo)

                    }

            }

            file.withWriter {wirter-> Writer.append(sw.toString())}

}else{

####//已有版本

            xmlBuilder.release{

                        versionCode(versionMsg.versionCode)

                        versionName(versionMsg.versionName)

                        versionInfo(versionMsg.versionInfo)

            }

####//将生成的xml数据插入到根节点之前

            def lines=file.readLines()

            def lengths=lines.size()-1

            file.withWriter {

                lines.eachWithIndex{ String entry,int i ->

                        if(i!=lengths){

                                it.append('\r\r\n'+sw.toString()+'\r\n')

                                it.append(lines.get(lengths))

                        }

                }

        }

    }

}

}

###//输入文件

task readTask{

    inputs.file destFile

        doLast{

            def file=inputs.files.singleFile

            println(file.text())

        }

}

class VersionMsg{

    StringversionCode

    StringversionName

    StringversionInfo

}

###//测试task

tast testTast(dependsOn:[readTask,writeTask]){

    doLast{

        println("输入输出任务结束")

    }

}

###//将wirteTask挂载到build task执行之后.

this.project.afterEvaluate {

    def buildTask=project.tasks.getByName('build')

    if(buildTask==null){

        throw GradleException("thie build task is not found")

    }

    buildTask.doLast {

        writeTask.execute()

    }

}

###//执行顺序指定mustRunAfter 强制 shouldRunAfter不强制.

task taskA{

    doLast{

    println('taskA')

    }

}

task taskB{

    mustRunAfter taskA

    doLast{

        println('taskB')

    }

}

task taskC{

    mustRunAfter taskB

    doLast{

        println('taskC')

    }

}

###//task挂载到build task构建声明周期中.

taskA.mustRunAfter variantOutput.processManifest

variantOutput.processResources.dependsOn taskA

####//这样taskA就会在variantOutput.processManifest之后,variantOutput.processResources task之前.这两个task之间执行.

####//task类型project 提供的创建task 都是DefaultTask类型.具体有哪些类型可以使用查看

###官方文档.

https://docs.gradle.org

你可能感兴趣的:(gradle(5)-task(2))