如何設置gradle運行一個特定的自定義複製任務,僅在運行單元測試時?想運行自定義gradle任務只有在運行時單元測試
編輯
我希望當我按下建立運行這些任務,我。 e僅適用於包含單元測試執行的構建版本。
如何設置gradle運行一個特定的自定義複製任務,僅在運行單元測試時?想運行自定義gradle任務只有在運行時單元測試
編輯
我希望當我按下建立運行這些任務,我。 e僅適用於包含單元測試執行的構建版本。
我終於找到了解決辦法,用this documentation的幫助下呈現所有在build
運行的任務,test
,release
等以非常簡潔的方式。因此,通過執行任務clean
,preBuild
取決於我的copyTask
我可以確保在每次清理或構建項目時運行復制任務。
但是由於我不想在構建或清理過程中運行這個程序,但是當我只運行測試時想運行它,我確定了一個編譯釋放單元測試源的任務,名爲compileReleaseUnitTestSources
,但只是在構建中提及它。作爲gradle這個
compileReleaseUnitTestSources.dependsOn(myCopyTask)
不實際工作,因爲gradle這個會給一個錯誤,說找不到任務compileReleaseUnitTestSources
作爲某些原因,任務還不可用。相反,通過在afterEvaluate
塊包圍它,我們可以保證所有的任務後評估該塊被執行,這樣,我們有機會獲得現在的任務,所以最後我說這對我的build.gradle
afterEvaluate {
compileReleaseUnitTestSources.dependsOn(copyResDirectoryToClasses)
}
所有這裏的答案提到使用dependsOn
關鍵字將我的任務附加到在一般構建/測試執行期間運行的另一個任務,但是他們中沒有人提到如何解決gradle無法找到任務即使您知道任務的問題確保這些任務在構建/測試執行期間可用並運行。
您可以讓某個任務完成另一個任務,在這種情況下,只有在另一個任務被調用後,此任務纔會運行。可以這樣做的:
task runUnitTest << {
println 'running tests'
}
task copyTestResults << {
println 'copying results'
}
//make copyTestResults finalize runUnitTest
runUnitTest.finalizedBy copyTestResults
您可以在官方user guide讀到它。
此外,如果你的單元測試可以跟上時代的,你不希望運行你在這種情況下,複製任務,您可以檢查測試任務狀態,並跳過副本任務,如:
task copyTestResults {
doFirst {
//chtck anothe task status and skip this one if it didn't actually work
if (!tasks.getByName("runUnitTest").getState().didWork) {
throw new StopExecutionException();
}
}
doLast{
println 'copying results'
}
}
或者,如果你只需要以前的單元測試運行復制任務,通過設置使其依賴於複製任務的測試任務是dependsOn
財產,擁有多項OG例子讀到它here
你必須設置一個「customCopyTask」,然後製作測試任務,這個測試任務就是這樣的,這個測試任務就像這個「customCopyTask」一樣依靠這個
task customCopyTask(type: Copy) {
from sourceSets.test.resources
into sourceSets.test.output.classesDir
}
test.dependsOn customCopyTask
當我右鍵單擊我的單元測試方法並單擊運行單元測試時,well將會自動執行這些任務嗎? – Bhargav
@Bhargav如果你將它應用到任務,它運行你的測試並運行它們,當確定 – Stanislav
當我點擊運行單元測試時,我會發現哪些任務運行? – Bhargav