該賞金過期3天。此問題的答案有資格獲得 250聲望獎勵。 布拉德梅斯希望引起更多人對這個問題的關注。
我有一個結合了庫和 CLI 工具的模塊化 Java 專案:
- cli工具/
- 創建補丁
- 發現沖突
- 模塊/
- 核
- 分析
我正在嘗試從 cli-tools 專案創建一個組合發行版,其中包含所有依賴 jar 和application插件生成的所有啟動腳本。我的構建依賴項正在運行,并且包含了我的本地 jar,但未包含啟動腳本,也沒有包含 s.jar 檔案中的任何內容runtimeClasspath。我的日志宣告沒有顯示任何子專案上的插件,即使它們的任務正在執行,所以也許我檢查插件的方法是錯誤的?
// cli-tools/build.gradle.kts:
tasks.named("distZip").configure {
subprojects.forEach {
dependsOn(it.path.plus(":startScripts"))
}
}
distributions {
main {
distributionBaseName.set("patch-tools")
contents {
project.subprojects.forEach { sub ->
val subLibs = sub.buildDir.resolve("libs")
if (subLibs.exists())
into("lib") {
from(subLibs)
}
sub.logger.info("plugins of {}: {}", sub.name, sub.plugins)
if (sub.pluginManager.hasPlugin("application")) {
into("lib") {
from(sub.configurations.findByName("runtimeClasspath"))
}
into("bin") {
from(sub.buildDir.resolve("scripts"))
}
}
}
}
}
}
我怎樣才能讓它作業,以便在發行版中包含啟動腳本和傳遞依賴項?
uj5u.com熱心網友回復:
我認為這一行:
dependsOn(it.path.plus(":startScripts"))
應該是:
dependsOn(":startScripts")
...因為不能將路徑與模塊名稱混合在一起;也沒有可用的子模塊。然而,這個問題并不完全清楚,它:startScripts是一個任務還是一個模塊。
uj5u.com熱心網友回復:
我建議不要嘗試從子專案構建目錄中手動收集子專案分布的各個部分,而是建議先讓子專案創建它們的完整分布,然后讓父專案將它們組合成一個新的分布。這還有一個優點,您不會錯過組合發行版中子專案發行版的任何非默認/特殊部分(如檔案或其他目錄)。
這是你的cli-tools/build.gradle.kts樣子:
plugins {
distribution
}
tasks.named<Zip>("distZip") {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
distributions {
main {
distributionBaseName.set("patch-tools")
project.subprojects.forEach { sub ->
sub.afterEvaluate {
tasks.all { task ->
if (task.name == "installDist") {
contents.from(task)
}
true
}
}
}
}
}
在distZip(通過分發任務contents CopySpec)現在自動依賴于installDist子專案的任務并產生由它們的輸出的組合分布。
(使用 Gradle 7.3.2 成功測驗)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387123.html
