我在的build.gradle任務,看起來像這樣:空源JAR搞砸了子項目的依賴沒有
task sourceJar(type: Jar, dependsOn: classes) << {
classifier = 'sources'
from sourceSets.main.allSource
}
運行gradle sourceJar
創造了林達一個jar文件/但它是空的(不包括任何來源,只是清單)。 刪除<<
修復了它由於某種原因,該jar被正確創建,但擰了其他東西(子項目現在失去了編譯依賴項,專門爲他們定義)。
因此,三個(也許是四個?)問題在這裏: (1)有什麼問題?爲什麼在任務定義爲<<
時sourceSets爲空? (2)爲什麼刪除<<
修復它?我的理解是,它使得塊的內部每次都「內聯」執行,而不僅僅是當任務被特別執行時。 (3)如何解決這個問題?我不能僅僅刪除<<
,因爲就像我說的那樣,它把其他事情搞砸了(但是看問題#4)。 (4)爲什麼要刪除<<
擰緊子項目?這是預期的嗎? 爲了澄清,這裏就是我所說的:
subprojects {
apply plugin: 'java'
dependencies {
compile project(':a')
}
task cp << {
println ("PROJECT " + project.name + ">> " + sourceSets.main.runtimeClasspath.collect { it.absolutePath }.join(':'))
}
}
project(':b') {
dependencies {
compile project(':c')
}
}
運行gradle -q b:cp
打印出
PROJECT b>> b/build/classes/main:b/build/resources/main:a/build/libs/a.jar:c/build/libs/c.jar
(我刪除了絕對路徑)。這就是我要的。
現在,如果我從文件中刪除<<
,並再次運行gradle -q b:cp
,我得到這個
PROJECT a>> a/build/classes/main:a/build/resources/main:/a/build/libs/a.jar
PROJECT b>> b/build/classes/main:b/build/resources/main:a/build/libs/a.jar
PROJECT c>> c/build/classes/main:c/build/resources/main:a/build/libs/a.jar
這是錯誤的方法有兩種:第一,我沒問它的所有三個子項目來運行,僅針對b
,其次,請注意,b
在其類路徑中不再有c
。
有人有線索請幫我弄清楚這裏發生了什麼...我真的要放棄並切換到sbt(是的,這是一種威脅!)。
好的,這有助於,謝謝!我知道'<<'的含義是什麼,拋棄我的是,用(幾乎)相同的語法,有時候你需要它,有時你不需要它:)我仍然不確定爲什麼'順便說一下,在jar任務中的「<<」會把它弄糟。你解釋了爲什麼我不需要它,但不是爲什麼我不能擁有它。 – Dima