我同意與接受的答案太本金。 我發現一個項目,其中客戶端需要兩個JAR基本上是相同的文件,但Manifest僅通過Class-Path鍵不同。
jar {
manifest {
attributes(
"Main-Class": platformMainClass,
"Implementation-Title": platformDisplayName,
"Implementation-Description": platformDescription,
"Platform-Version": platformVersion,
"Implementation-Version": version,
"Build-Assembly-User": System.getProperty("user.name"),
"Build-Assembly-Date": new java.util.Date().toString(),
"Class-Path": configurations.compile.collect { "lib/"+it.getName() }.join(' ')
)
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
exclude([ 'log4j*.properties', 'uk/gov/acme/secret/product/server/**' ])
}
同樣的清單,然後將源代碼是:
task applicationClientJar(type: Jar, description: "Creates the Application Client JAR file.") {
dependsOn compileJava
manifest {
attributes(
"Main-Class": platformMainClass,
"Implementation-Title": platformDisplayName,
"Implementation-Description": platformDescription,
"Platform-Version": platformVersion,
"Implementation-Version": version,
"Assembly-Date": new java.util.Date().toString()
)
}
archiveName = "acme-client-${platformVersion}.jar"
destinationDir = file("${buildDir}/libs")
from sourceSets.main.output
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
exclude([ 'log4j*.properties', 'uk/gov/acme/secret/product/server/**' }
所以格熱戈日表示法是正確的,因爲搖籃應該知道有兩種不同的JAR與GAVs。多模塊是首選。
compile "uk.gov.acme.secret:acme:1.0" // CORE
compile "uk.gov.acme.secret:acme-client:1.0"
來配置這個問題的唯一方法是使用多模塊式搖籃項目,然後添加一個編譯和/或部署依賴於核心/主項目。
project(':common:acme-micro-service-webapp') {
dependencies {
compile project(':common:acme-core')
}
}
在'acme-micro-service-webapp'項目中,這確保首先編譯從屬'common:acme-core'。 PS:我仍在試圖找出更好的解決方案。
PS PS:如果您使用的是Maven,也可以勾選`install'任務。
這很好,但是您如何引用其他項目的單獨'.jar'文件 - 例如你怎麼能把'client.jar'放到另一個子項目中呢? – z0r
@z0r我們只是將工件發佈到存儲庫,然後將它們用作子項目中的依賴關係。 P.S.對於延遲迴復抱歉。 – vitalidze