2015-04-23 755 views
23

到目前爲止,我已經添加了以下到我的build.gradle如何擴展gradle的clean任務來刪除文件?

apply plugin: 'base' 
clean << { 
    delete '${rootDir}/api-library/auto-generated-classes/' 
    println '${rootDir}/api-library/auto-generated-classes/' 
} 

然而,不僅是我的文件不會被刪除,但打印聲明顯示,${rootDir}沒有被轉化爲我的項目的根目錄下。爲什麼不行,我缺少什麼概念?

回答

32

你只需要使用雙引號。另外,如果您打算在執行期間執行刪除操作,請刪除<<並使用doFirst。例如:

clean.doFirst { 
    delete "${rootDir}/api-library/auto-generated-classes/" 
    println "${rootDir}/api-library/auto-generated-classes/" 
} 

Gradle構建腳本是用Groovy DSL編寫的。在Groovy中,您需要使用雙引號進行字符串插值(當您使用${}作爲佔位符時)。看看here

+1

不知道這件事。它將在* configuration *階段刪除文件,而不是在執行過程中。 – Opal

21

<<相當於clean.doLastdoFirstdoLast訂購執行階段的操作, 這很少與刪除操作相關。

在這種情況下,你不需要任何人。 從基本的清潔工作是Delete型, 所以你只需要通過它的閉合來告訴它在配置時間刪除的內容在執行時:

clean { 
    delete 'someFile' 
} 

AS mushfek0001正確指出它在他的回答,你應該使用雙引號的變量代換工作:

clean { 
    delete "${buildDir}/someFile" 
} 

你需要有至少應用於此基礎插件工作,其他大多數的插件,如Java插件或者應用基礎或聲明自己 clean任務類型刪除Delete任務。如果你沒有這個錯誤,你會得到一個錯誤clean方法一。

apply plugin: 'base' 
+1

'delete'$ {buildDir}/someFile''不會解析'buildDir'的變量。你需要在這裏使用'''',例如'delete'$ buildDir/someFile「' –

+0

將'''的拼寫錯誤糾正爲''''。雙重wuotes需要[GStrings](http://docs.groovy-lang.org/latest/html/api/groovy/lang/GString。html) – Alpar

+0

但是這樣你完全替換了clean的默認行爲。如果他有更多的附加任務呢? – mushfek0001

7

爲了延長清潔任務時,可以使用

clean.doFirst {} 

clean.doLast {} 

這將使你注入自己的行動納入清潔過程。爲了刪除文件和目錄,您可以使用不需要任何額外插件的「文件」API。

這裏是一個將同時刪除文件和目錄在清理任務的最後一步一個例子:

clean.doLast { 
    file('src/main/someFile.txt').delete() 
    file('src/main/libs').deleteDir() 
}