Was ist der Unterschied zwischen Buildscript und Allprojects in build.gradle?

135

Kann mir jemand bei einem Gradle-Build mit mehreren Projekten sagen, was genau der Unterschied zwischen dem Abschnitt "allprojects" und dem Abschnitt "Buildscript" ist? Beide haben eine repositoriesund dependenciesAufgabe. Ist allprojectsfür mein Projekt? Was ist mit buildscript?

buildscript {  
     repositories {
         ...
     }
     dependencies {
         ...
     }
}

und

allprojects(subprojects) { 
     repositories {
         ...
     }
     dependencies {
         ...
     }
}
Kidoher
quelle

Antworten:

137

Der buildscriptKonfigurationsabschnitt " " ist für Gradle selbst (dh Änderungen daran, wie Gradle den Build ausführen kann). Daher enthält dieser Abschnitt normalerweise das Android Gradle-Plugin.

Der allprojectsAbschnitt " " ist für die Module, die von Gradle erstellt werden.

Oft ist der Repository-Abschnitt für beide gleich, da beide ihre Abhängigkeiten normalerweise von jcenter (oder vielleicht von maven central) erhalten. Der Abschnitt "Abhängigkeiten" wird jedoch anders sein.

Normalerweise ist der Abschnitt "Abhängigkeiten" für "allprojects" leer, da die Abhängigkeiten für jedes Modul eindeutig sind und sich in der Datei "build.gradle" in jedem der Module befinden. Wenn jedoch alle Module dieselben Abhängigkeiten aufweisen, können sie hier aufgelistet werden.

AndroidGuy
quelle
Müssen wir die Gradle-Version angeben?
Igor Ganapolsky
Benutzer: 6998684 Die Version von gradle gilt für das gesamte Projekt und wird in einer Datei deklariert, die etwas versteckt ist. Schauen Sie in "./gradle/wrapper/gradle-wrapper.properties"
AndroidGuy
22

TL; DR: buildscriptHilft bei der Suche nach Plugins und allprojectsgilt für alle Projekte


https://docs.gradle.org/current/userguide/userguide_single.html#applyPluginBuildscript sagt

Binäre Plugins, die als externe JAR-Dateien veröffentlicht wurden, können einem Projekt hinzugefügt werden, indem das Plugin dem Klassenpfad des Erstellungsskripts hinzugefügt und dann das Plugin angewendet wird.

Sie benötigen also buildscriptgradle, um die Plugins zu finden, wie

Gradle bietet im Kern absichtlich nur sehr wenig für die Automatisierung in der realen Welt. Alle nützlichen Funktionen, wie die Möglichkeit, Java-Code zu kompilieren, werden durch Plugins hinzugefügt. Plugins fügen neue Aufgaben (z. B. JavaCompile), Domänenobjekte (z. B. SourceSet), Konventionen (z. B. Java-Quelle befindet sich unter src / main / java) hinzu und erweitern Kernobjekte und Objekte von anderen Plugins.

Betrifftallprojects :

Die Projekt-API stellt eine Eigenschaft bereit, allprojectsdie eine Liste mit dem aktuellen Projekt und allen darunter liegenden Unterprojekten zurückgibt. Wenn Sie allprojectsmit einem Abschluss anrufen , werden die Anweisungen des Abschlusses an die mit verknüpften Projekte delegiert allprojects.

serv-inc
quelle
Für mich als Anfänger im Android-Ökosystem bedeutet dies nichts. Wo müssen wir unsere Abhängigkeiten platzieren? Können wir dieses "Buildscript" löschen?
Martin Berger
@MartinBerger: Fügen Sie Ihre Abhängigkeiten in die Module ein build.gradle , nicht in das build.gradleVerzeichnis oben, mit dem sich diese Frage befasst
serv-inc