Ho trovato una soluzione che ha funzionato bene per me. La chiave è che si aggiungere un sottoprogetto separato per creare il dist. Questo sottoprogetto è sibling per gli altri sottoprogetti. Cioè, non provare a codificare la distribuzione nel tuo file di livello superiore build.gradle
.
Chiamiamo il nuovo sottoprogetto dist
. La prima cosa da fare è quello di aggiungere al vostro livello superiore settings.gradle
file nella root multi-progetto:
include "subproject1", "subproject2", "subproject3", ....... , "dist"
Il progetto dist
deve come minimo comprendere:
build.gradle
- per essere illustrati qui di seguito
src/main/dist/at_least_one_dummy_file.txt
- il plug-in di distribuzione richiede sempre una directory src/main/$distribution.name
. Avere uno non vuoto con un distribution.name
di main
fa in modo che il plugin segua tutte le dipendenze transitive di tutti i sorgenti di main
di tutti i progetti di pari livello.
Avanti, il file build.gradle
per il progetto 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"
. . .
}
}
}
Quindi eseguire gradle distZip
. Il file ZIP
in dist/build/distributions
avrà una sottodirectory lib
con ogni singolo JAR
desiderato: il progetto di pari livello JAR
s e le loro dipendenze transitive.
A causa dell'astuzia che abbiamo utilizzato, il plug-in di distribuzione renderà uno JAR
vuoto chiamato dist-${version}.jar
. Per ragioni estetiche, lo rimuovo con la chiamata exclude
qui sopra, ma è innocua. È anche possibile utilizzare una seconda chiamata exclude
per rimuovere at_least_one_dummy_file.txt
se non ci sono realmente contenuti in src/main/dist
che si desidera includere. Se non vuoi aggiungere alcun artefatto e/o rimuovere quelli menzionati qui, non hai nemmeno bisogno di una sezione contents
.
Ho anche trovato modi per includere selettivamente diversi artefatti in base al fatto che si tratti di una distribuzione "dev" o "prod", un profilo di La Maven. Se vuoi che lo aggiunga, per favore pubblica commenti e lo farò.
fonte
2014-05-16 17:29:13
Non ho potuto farlo funzionare con Gradle 3.3. –