我有一個專案,Gradle 沒有將所有測驗資源復制到輸出目錄,我不知道我做錯了什么,或者這是否是 Gradle 中的錯誤。我設法創建了一個簡化的測驗用例;目錄結構如下:
gradle/ # (contains Gradle wrapper files)
src/
hello/
Hello.java
tests/
hello/
hello.txt
foo/
bar.txt
build.gradle
gradlew
gradle.bat
build.gradle 的內容如下:
apply plugin: 'java'
sourceSets {
main {
java.srcDirs = ['src']
resources.srcDirs = ['src']
resources.excludes = ['**/*.java']
}
test {
java.srcDirs = ['tests']
resources.srcDirs = ['tests']
resources.excludes = ['**/*.java']
}
}
task staging (type: Copy) {
from processResources
from processTestResources { include 'foo/' } // Offending line
into "${buildDir}/staging"
}
task run (type: JavaExec) {
dependsOn staging
// [...]
}
當我運行時:
./gradlew processTestResources # or just ./gradlew test
只有來自 tests/foo 的資源被復制到輸出檔案夾。來自 tests/hello 的資源不會被復制。
但是,如果我在暫存任務中注釋掉標記為“違規行”的行,則會復制所有資源。
這是預期的行為嗎?看起來 Gradle 正在嘗試計算需要哪些資源,并且發現該staging任務只需要測驗/foo。但我沒有運行staging任務;我應該能夠運行processTestResourcesortest任務并將所有測驗資源復制到輸出檔案夾。
這是 Gradle 中的錯誤嗎?
更新:
這是GH 中相關問題的鏈接(已關閉為無效,因為這不是真正的錯誤,如接受的答案中所述)。
uj5u.com熱心網友回復:
問題在于 Groovy 解釋“違規行”的方式:沒有括號,Groovy 將后面的所有內容解釋from為引數。因此它獲取對processTestResources任務的參考,對其應用配置閉包,然后將結果傳遞給from.
所以最終結果是您配置了行內的processTestResources而不是配置from.
添加括號改變了含義,清楚地表明from使用任務呼叫的結果就是要配置的內容:
from(processTestResources) { include 'foo/' }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/511769.html
上一篇:Gradle構建失敗java.security.NoSuchAlgorithmException:在運行Ubuntu20.04的覆盆子上構建實作時出錯
