groovy-gradle-task(二)
//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() 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('rrn'+sw.toString()+'rn') 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型別.具體有哪些型別可以使用檢視官方文件.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3034/viewspace-2811844/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 二
- Android 二維碼相關(二)Android
- 二維字首和 & 二維差分
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 二、列表
- 同步(二)
- Fiddler(二)
- Runtime(二)
- mipmap 二
- CSS二CSS
- wqs二分(帶權二分)
- 二進位制檔案視覺化(二)視覺化
- 二維碼管理平臺 生成二維碼
- 二分
- 2024.10.29(週二)
- 作業二
- 實驗二
- 二轉十
- 2024.10.8(週二)
- 2024.10.1(週二)
- 二值影像
- 002、感遇二
- springboot(二)、RestApiSpring BootRESTAPI
- 十轉二
- 二、外掛
- 逆向WeChat (二)
- 隨筆(二)
- 二級市盈率
- [Docker二]DNSDockerDNS
- 重走springboot(二)Spring Boot
- Seastar 教程(二)AST
- Springcloud(二) feignSpringGCCloud
- MySQL 二 索引MySql索引
- 日記二
- 第二題
- 第二週
- 二、變數變數
- 巧用 TypeScript(二)TypeScript