Wann wird gradle.properties vs. settings.gradle verwendet?

88

Ein Gradle-Build enthält drei Dateien

  • build.gradle das definiert die Build-Konfigurationsskripte
  • gradle.properties
  • settings.gradle

Fragen

  • Was sind Unterschiede zwischen settings.gradle&gradle.properties ?
  • Wann sollte ein Einstellungen setzen settings.gradlevs. gradle.properties?
ams
quelle

Antworten:

84

settings.gradle

Die settings.gradleDatei ist genau wie die build.gradleDatei ein Groovy-Skript . settings.gradleIn jedem Build wird nur ein Skript ausgeführt (im Vergleich zu mehreren build.gradleSkripten in Builds mit mehreren Projekten). Das settings.gradleSkript wird vor jedem build.gradleSkript und sogar vor dem ProjectErstellen der Instanzen ausgeführt. Daher wird es gegen ein SettingsObjekt ausgewertet . Mit diesem SettingsObjekt können Sie Ihrem Build Unterprojekte hinzufügen, die Parameter über die Befehlszeile ( StartParameter) ändern und auf das GradleObjekt zugreifen , um Lifecycle-Handler zu registrieren. Verwenden settings.gradleSie diese Option daher, wenn Ihre Einstellungen Build-bezogen und nicht unbedingt projektbezogen sind oder Logik erfordern, bevor mögliche Teilprojekte aufgenommen werden.

gradle.properties

Die gradle.propertiesDatei ist eine einfache Java- PropertiesDatei, die nur dann eine besondere Rolle erhält, wenn sie automatisch in den Bereich des ProjectObjekts aufgenommen wird (als sogenannte "Projekteigenschaften"). Es ist ein einfacher Schlüsselwertspeicher, der nur Zeichenfolgenwerte zulässt (Sie müssen also Listen oder Arrays selbst aufteilen). Sie können gradle.propertiesDateien an folgenden Speicherorten ablegen:

  • direkt im Projektverzeichnis (für projektbezogene Werte)
  • im Benutzer- .gradleAusgangsverzeichnis (für benutzer- oder umgebungsbezogene Werte)
Lukas Körfer
quelle
61

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.gradlein 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.gradleDatei des Hauptmoduls können Sie Einstellungen für alle anderen Module verwenden allprojects {}oder subprojects {}definieren.

In der build.gradleDatei 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.propertiesDies 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.gradleDateien 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 buildSrcQuellordners in kann wie für jedes Java / Groovy / Kotlin-Projekt angepasst werden.

tkruse
quelle