我發現,一直爲我工作很好的解決方案。關鍵是你添加一個單獨的子項目來創建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
目錄。具有 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
。 dist/build/distributions
中的ZIP
文件將有一個lib
子目錄,您需要每個JAR
子目錄:兄弟項目JAR
和它們的傳遞依賴項。
由於我們使用的詭計,分配插件將會產生一個空的JAR
,稱爲dist-${version}.jar
。出於美觀的原因,我將上面的exclude
調用刪除它,但它是無害的。如果在src/main/dist
之下確實沒有您想要包含的內容,您也可以使用第二個exclude
電話來刪除at_least_one_dummy_file.txt
。如果你不想添加任何文物和/或刪除這裏提到的那些,那麼你根本不需要contents
部分。
我也根據這是一個「dev」還是「prod」分佈,la Maven概要文件,找到了有選擇地包含不同工件的方法。如果你想讓我補充一點,請發表評論,我會。
我不能使用Gradle 3.3進行這項工作。 –