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
- 二維字首和 & 二維差分
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 同步(二)
- CSS二CSS
- mipmap 二
- ECMAScript——(二)
- ionicframework(二)Framework
- 二、列表
- 第二章 jQuery技術解密 (二)jQuery解密
- 二維碼管理平臺 生成二維碼
- 二進位制檔案視覺化(二)視覺化
- 二叉樹 & 二叉查詢樹二叉樹
- 微信二次開發(生成二維碼)
- ITPUB SQL大賽第二期(二)SQL
- 三隅二不二的PM模型(轉載)模型
- 吳恩達機器學習-第二課-第二週吳恩達機器學習
- 希爾排序(二)排序
- this全面解析(二)
- [Docker二]DNSDockerDNS
- 二、變數變數
- 泛型(二)泛型
- webpack教程(二)Web
- 巧用 TypeScript(二)TypeScript
- MySQL 二 索引MySql索引
- Seastar 教程(二)AST
- 專案二
- iptables系列二
- NGINX模組(二)Nginx
- Django初探(二)Django
- CSS技巧(二)CSS
- HTTP首部(二)HTTP
- Oracle Flashback(二)Oracle
- oracle 程式(二)Oracle
- Nim教程【二】
- MongoDB系列二MongoDB
- Oracle梳理二Oracle
- CLUVFY工具(二)