我有一个 Gradle 6.5 项目 bar
它有几个子项目并使用拆分包,我无法在当前配置中删除。
我想再打包一个bar-all
通过 MANIFEST.MF 声明自动模块名称的工件
Automatic-Module-Name: com.foo.bar
并包含来自所有子项目的所有类。这个附加工件的主要目的是用于模块化应用程序并避免拆分包问题。我怀疑我需要获取其他子项目的构建输出并在
bar-all
内的自定义 Jar 任务中重用它们但找不到一个很好的例子。
最佳答案
对于下面的示例结构,其中 top 项目依赖于所有子项目 - 所以 top 构建 uber jar
top
|___spa
|___spb
|___spc
|___spd
|___spe
设置.gradlerootProject.name = 'top'
include 'spa', 'spb', 'spc', 'spd', 'spe'
构建.gradledependencies {
implementation project('spa')
implementation project('spb')
implementation project('spd')
implementation project('spe')
implementation 'com.google.guava:guava:28.1-jre'
}
task jarAll(type: Jar, dependsOn: jar) {
archiveClassifier = 'all'
from sourceSets.main.output
dependsOn configurations.runtimeClasspath
from {
configurations.runtimeClasspath.allDependencies.findAll { it instanceof ProjectDependency }.collect { it.dependencyProject.sourceSets.main.output }
}
manifest {
attributes (
"Automatic-Module-Name": "com.foo.bar" )
}
}
top-all.jar 将包含来自子项目的类;
关于java - 使用 Gradle 6 构建避免拆分包的附加工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63020806/