Ein Multi-Modul-Projekt besteht aus einem Hauptmodul und vielen Submodulen. Es hat dieses 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/
Submodule können sich auch tiefer in Unterordnern befinden, aber ohne den Code in settings.gradle zu ändern, enthält ihr Name den Namen solcher Ordner.
settings.gradle
Die Hauptaufgabe von settings.gradle besteht darin, alle enthaltenen Submodule zu definieren und das Verzeichnisstammverzeichnis eines Modulbaums zu markieren, sodass Sie settings.gradle
in einem Projekt mit mehreren Modulen nur eine Datei haben können .
rootProject.name = 'project-x'
include 'sub-a', 'sub-b'
Die Einstellungsdatei ist ebenfalls groovig geschrieben, und die Suche nach Submodulen kann angepasst werden.
build.gradle
Pro Modul gibt es eine solche Datei, die die Erstellungslogik für dieses Modul enthält.
In der build.gradle
Datei des Hauptmoduls können Sie Einstellungen für alle anderen Module verwenden allprojects {}
oder subprojects {}
definieren.
In der build.gradle
Datei der Submodule können Sie verwendencompile project(':sub-a')
dass ein Submodul vom anderen abhängt.
gradle.properties
Dies ist optional. Der Hauptzweck besteht darin, Startoptionen bereitzustellen, die zum Ausführen von gradle selbst verwendet werden können, z
org.gradle.jvmargs=-Xmx=... -Dfile.encoding=UTF-8 ...
org.gradle.configureondemand=true
Diese Werte können von einer Datei USER_HOME/.gradle/gradle.properties
überschrieben und von Gradle-Befehlszeilenargumenten überschrieben werden. Es ist auch möglich, Umgebungsvariablen für den Build in dieser Datei systemProp.
als Präfix festzulegen.
Jede Eigenschaft in dieser Datei kann in jedem build.gradle verwendet werden. Einige Projekte fügen daher auch Abhängigkeitsversionen oder Release-Informationen hinzu. gradle.properties
Dies ist jedoch wahrscheinlich ein Missbrauch dieser Datei.
my-gradle-stuff / utils.gradle
(Jeder Name eines Ordners oder einer Datei ist möglich.) Sie können zusätzliche benutzerdefinierte Gradle-Dateien definieren, um Definitionen wiederzuverwenden, und diese über in andere Gradle-Dateien aufnehmen
apply from: "$rootDir/gradle/utils.gradle"
andere Orte, um dies zu setzen, könnten sein src/gradle
oder seinsrc/build/gradle
buildSrc / ...
Dieser Ordner ist etwas Besonderes, er ist wie ein separates Gradle-Projekt für sich. Es wird erstellt, bevor Sie etwas anderes tun, und kann Funktionen bereitstellen, die in jeder anderen Gradle-Datei verwendet werden können. Aus technischen Gründen funktioniert die IDE-Unterstützung für Verweise auf diesen Ordner viel besser als jede andere Methode zum Extrahieren von gemeinsamem Code aus mehreren build.gradle
Dateien an einen separaten Speicherort.
Sie können komplexe benutzerdefinierte Build-Logik in Java, Groovy oder Kotlin definieren, anstatt ein Plugin zu schreiben und bereitzustellen. Dies ist auch nützlich, um Ihren benutzerdefinierten Build-Code zu testen, da Sie Komponententests durchführen können. Die Struktur des buildSrc
Quellordners in kann wie für jedes Java / Groovy / Kotlin-Projekt angepasst werden.