Un projet multi-modules comprend un module principal et de nombreux sous-modules. Il a cette disposition:
(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/
Les sous-modules peuvent également être situés plus profondément dans les sous-dossiers, mais sans modifier le code dans settings.gradle, leur nom inclura le nom de ces dossiers.
settings.gradle
Le rôle principal de settings.gradle est de définir tous les sous-modules inclus et de marquer la racine du répertoire d'une arborescence de modules, de sorte que vous ne pouvez avoir qu'un seul settings.gradle
fichier dans un projet multi-module.
rootProject.name = 'project-x'
include 'sub-a', 'sub-b'
Le fichier de paramètres est également écrit en groovy et la recherche de sous-modules peut être personnalisée.
build.gradle
Il existe un fichier de ce type par module, il contient la logique de construction de ce module.
Dans le build.gradle
fichier du module principal , vous pouvez utiliser allprojects {}
ou subprojects {}
pour définir les paramètres de tous les autres modules.
Dans le build.gradle
fichier des sous-modules, vous pouvez utiliser compile project(':sub-a')
pour faire dépendre un sous-module de l'autre.
gradle.properties
Ceci est facultatif, son objectif principal est de fournir des options de démarrage à utiliser pour exécuter gradle lui-même, par exemple
org.gradle.jvmargs=-Xmx=... -Dfile.encoding=UTF-8 ...
org.gradle.configureondemand=true
Ces valeurs peuvent être remplacées par un fichier USER_HOME/.gradle/gradle.properties
et remplacées par des arguments de ligne de commande gradle. Il est également possible de définir des variables d'environnement pour la construction dans ce fichier en utilisant systemProp.
comme préfixe.
Toute propriété de ce fichier peut être utilisée dans n'importe quel build.gradle, de sorte que certains projets mettent également des informations de version ou de version de dépendance dans gradle.properties
, mais c'est probablement un abus de ce fichier.
my-gradle-stuff / utils.gradle
(N'importe quel nom de dossier ou de fichier est possible.) Vous pouvez définir des fichiers de gradle personnalisés supplémentaires pour réutiliser les définitions et les inclure dans d'autres fichiers de gradle via
apply from: "$rootDir/gradle/utils.gradle"
d'autres endroits pour mettre cela pourrait être src/gradle
ousrc/build/gradle
buildSrc / ...
Ce dossier est spécial, c'est comme un projet gradle séparé en soi. Il est construit avant de faire quoi que ce soit d'autre, et peut fournir une fonction à utiliser dans tout autre fichier gradle. Pour des raisons techniques, la prise en charge par IDE des références à ce dossier fonctionne bien mieux que tout autre moyen d'extraire du code commun de plusieurs build.gradle
fichiers vers un emplacement distinct.
Vous pouvez définir une logique de construction personnalisée complexe en java, groovy ou kotlin, au lieu d'écrire et de déployer un plugin. Ceci est également utile pour les tests unitaires de votre code de build personnalisé, car vous pouvez avoir des tests unitaires. La structure du dossier source dans buildSrc
peut être adaptée comme pour tout projet java / groovy / kotlin.