我同意接受的答案原则上也是这样。我发现一个项目,客户需要两个JAR文件,本质上是相同的文件,只有Class-Path键在Manifest中不同。
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/**' }
所以Grzegorz的注释是正确的,因为Gradle应该知道有两个不同的具有GAVs的JAR。多模块是首选选项。
compile "uk.gov.acme.secret:acme:1.0" // CORE
compile "uk.gov.acme.secret:acme-client:1.0"
唯一配置此选项的方法是使用Multi-Module Gradle项目,然后将编译依赖项和/或部署依赖项添加到核心/主项目中。
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