Grade 自定義 Task 實現 修復 java.io.IOException: Could not delet folder "xxx"
阿新 • • 發佈:2018-12-20
之前釋出過一篇文章 :Gradlep構建 出現 java.io.IOException: Could not delet folder “xxx”,這裡邊講的是 將報錯檔案刪除就好,
後來總是遇到該問題,我就在想要不要弄成一鍵刪除的方式。於是想改用什麼方式實現自動刪除檔案
首先想到了Python指令碼 ,後來覺得AndroidStudio 中新增這個東西顯得不倫不類,後來想用Java 寫到測試單元中,emmm…可這樣顯得不夠逼格。於是gradle task 閃亮登場
具體步驟如下:
task delTask <<{ 具體想法如下 1.首先在專案下新建檔案del.file,將報錯資訊複製到檔案中 2.讀取del.file本地檔案內容 3.匹配到出錯的內容,擷取檔案所在全路徑 4.執行資料夾刪除操作 }
具體程式碼實現如下
task delTask{ doLast{ //讀取檔案,並裝進List。 def list = [] new File('del.file').withReader('UTF-8') { reader -> reader.eachLine { if (it.contains(">")) { def pre = it.indexOf("'") +1 def aft = it.lastIndexOf("'") list.add(it.substring(pre , aft)) } } File fileDel = new File(list.get(0)) println(">>>>>> 要刪除的資料夾路徑:"+fileDel.getAbsolutePath()) def isDel = fileDel.deleteDir() println(">>>>>> 資料夾是否刪除:"+isDel) } } }
將以上程式碼放到build.gradle 中,執行構建
最後 ,執行gradle delTask 完美刪除,不用再去資料夾中尋找檔案了
最最後 你可能不喜歡 執行完 delTask 在切換執行 installDebug 或者是 其他Task ,那好辦
afterEvaluate { tasks.matching { it.name.contains("preBuild")//preBuild 是程式的 build 的最最開始,你把delTask 載入這兒,每次執行都將會先執行 delTask }.each { task -> task.dependsOn(rootProject.tasks.delTask) // 任務依賴:執行task之前需要執行dependsOn指定的任務 } }