//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{ String versionCode String versionName String versionInfo }
//测试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类型.具体有哪些类型可以使用查看官方文档.
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦