2014-10-09 179 views
1

我必須編寫將複製文件的gradle任務。文件存儲在tests/[Name] /test.txt中,並且爲每個名稱創建編號的目錄/Test/test/Test/test/test01/,並且在每個目錄中應該是一個文件(源自test.txt文件夾重命名爲test00,TEST01等) 我的代碼,但行爲很奇怪...... 它創建正確的目錄/測試/ test00等,但在每個目錄下的所有文件具有相同的名稱... test06。所以目錄中的數字是正確的,但是在文件名中不是。Gradle複製和重命名文件

我的代碼是:

int copyTaskIterator = 0 
int testIterator = 0 
... 

sources.each { mySource -> 
    task "myCopyTask$copyTaskIterator"(type: Copy) 
    nameSuffix = String.format("%02d", testIterator) 
    fromPath = 'tests/'+mySource+'/test.txt' 
    toPath = "tested/test"+nameSuffix 

    tasks."myCopyTask$copyTaskIterator".from fromPath 
    tasks."myCopyTask$copyTaskIterator".into toPath 
    tasks."myCopyTask$copyTaskIterator".rename { fileName -> 
     fileName.replace '.txt', nameSuffix 
    } 

    preBuild.dependsOn tasks."myCopyTask$copyTaskIterator" 
    copyTaskIterator++ 
    testIterator++ 
} 
+0

難道你忘了一個左花括號,或者是不正確的縮進? – 2014-10-09 13:36:21

+0

凹處是不正確的,我只是編輯 – user3921796 2014-10-09 13:40:22

回答

0

的問題是,nameSuffix評估爲時已晚。可悲的是沒有文檔解釋它是否在執行時執行。 只是嘗試使用rename(java.util.regex.Pattern, java.lang.String)

tasks."myCopyTask$copyTaskIterator".rename("\\.txt", nameSuffix) 
+0

現在,它的偉大的工作,但我真的不明白爲什麼... 你能解釋爲什麼它的工作原理與正則表達式? – user3921796 2014-10-09 14:56:56

+0

您想要重命名文件的方式使用閉包,它需要文件的名稱。我不確定什麼時候它會被完全執行,但我認爲在gradle的執行階段,因爲在那之前它不能確定文件名。由於您覆蓋了'nameSuffix',因此它指向當時的最後一個值。使用另一個重命名方法,您可以使用舊的舊參數,這些參數會立即傳遞。 – 2014-10-09 15:59:40

相關問題