我找到了一个对我来说效果很好的解决方案。关键是您添加一个单独的子项目来创建 dist。该子项目是其他子项目的兄弟项目。也就是说,不要尝试在顶级build.gradle
文件中编写分发脚本。
让我们调用新的子项目dist
。settings.gradle
首先要做的是将它添加到您的多项目根目录中的顶级文件中:
include "subproject1", "subproject2", "subproject3", ....... , "dist"
您的dist
项目必须至少包括:
build.gradle
- 下文详述
src/main/dist/at_least_one_dummy_file.txt
- 分发插件总是需要一个src/main/$distribution.name
目录。distribution.name
拥有一个带有 a的非空 main
插件可以让插件遵循所有main
兄弟项目的所有源集的所有传递依赖项。
接下来,项目的build.gradle
文件dist
:
/* Hook in all sibling project jars and their transitive dependencies */
apply plugin: 'java'
dependencies {
compile project(':subproject1')
compile project(':subproject2')
compile project(':subproject3')
. . .
}
/* Distribution */
apply plugin: 'java-library-distribution'
distributions {
main {
baseName = "your-top-level-project-name"
contents {
exclude "dist-${version}.jar"
. . .
}
}
}
然后运行gradle distZip
。中的ZIP
文件dist/build/distributions
将有一个lib
子目录,其中包含JAR
您想要的每一个:兄弟项目JAR
及其传递依赖项。
由于我们使用的诡计,分发插件将创建一个空的JAR
名为dist-${version}.jar
. 出于美观的原因,我通过exclude
上面的调用将其删除,但它是无害的。如果确实没有要包含的内容,您还可以使用第二次exclude
调用来删除。如果您不想添加任何工件和/或删除此处提到的工件,那么您甚至根本不需要一个部分。at_least_one_dummy_file.txt
src/main/dist
contents
我还找到了根据这是“开发”还是“产品”发行版(例如 Maven 配置文件)有选择地包含不同工件的方法。如果你想让我补充,请在评论中发表,我会的。