Un progetto multimodulo ha un modulo principale e molti sottomoduli. Ha questo layout:
(root)
+- settings.gradle
+- build.gradle # optional (commonly present)
+- gradle.properties # optional
+-- buildSrc/ # optional
| +- build.gradle
| +-- src/...
+-- my-gradle-stuff/ # optional
| +- utils.gradle # optional
+-- sub-a/
| +- build.gradle
| +- src/
+-- sub-b/
+- build.gradle
+- src/
i sottomoduli possono anche essere posizionati più in profondità nelle sottocartelle, ma senza modificare il codice in settings.gradle, il loro nome includerà il nome di tali cartelle.
settings.gradle
Il ruolo principale di settings.gradle è definire tutti i sottomoduli inclusi e contrassegnare la directory root di un albero di moduli, in modo che tu possa avere un solo settings.gradle
file in un progetto multi-modulo.
rootProject.name = 'project-x'
include 'sub-a', 'sub-b'
Anche il file delle impostazioni è scritto in groovy e la ricerca del sottomodulo può essere personalizzata.
build.gradle
Esiste uno di questi file per modulo, contiene la logica di compilazione per questo modulo.
Nel build.gradle
file del modulo principale è possibile utilizzare allprojects {}
o subprojects {}
per definire le impostazioni per tutti gli altri moduli.
Nel build.gradle
file dei sottomoduli, puoi usare compile project(':sub-a')
per far dipendere un sottomodulo dall'altro.
gradle.properties
Questo è opzionale, il suo scopo principale è fornire opzioni di avvio da usare per eseguire lo stesso gradle, ad es
org.gradle.jvmargs=-Xmx=... -Dfile.encoding=UTF-8 ...
org.gradle.configureondemand=true
Questi valori possono essere sovrascritti da un file USER_HOME/.gradle/gradle.properties
e sovrascritti da argomenti della riga di comando gradle. Inoltre è possibile impostare variabili di ambiente per la compilazione in questo file utilizzando systemProp.
come prefisso.
Qualsiasi proprietà in questo file può essere utilizzata in qualsiasi build.gradle, quindi alcuni progetti inseriscono anche informazioni sulla versione della dipendenza o sulla versione gradle.properties
, ma questo è probabilmente un abuso di questo file.
my-gradle-stuff / utils.gradle
(È possibile qualsiasi nome di cartella o file.) È possibile definire file gradle personalizzati aggiuntivi per riutilizzare le definizioni e includerli in altri file gradle tramite
apply from: "$rootDir/gradle/utils.gradle"
altri posti dove mettere questo potrebbero essere src/gradle
osrc/build/gradle
buildSrc / ...
Questa cartella è speciale, è come un progetto gradle separato in sé. È costruito prima di fare qualsiasi altra cosa e può fornire funzioni da utilizzare in qualsiasi altro file gradle. Per motivi tecnici, il supporto IDE per i riferimenti a questa cartella funziona molto meglio di qualsiasi altro modo di estrarre codice comune da più build.gradle
file in una posizione separata.
Puoi definire una complessa logica di compilazione personalizzata in java, groovy o kotlin, invece di scrivere e distribuire un plugin. Ciò è utile anche per testare le unità del codice di build personalizzato, poiché è possibile eseguire test di unità. La struttura della cartella sorgente in buildSrc
può essere adattata come per qualsiasi progetto java / groovy / kotlin.