Ich bin neu bei Gradle und lese die Dokumentation, aber ich verstehe einige Teile davon nicht. Einer dieser Teile ist mit einem buildscript
Block verbunden. Was ist seine Aufgabe?
Wenn Ihr Build-Skript externe Bibliotheken verwenden muss, können Sie diese dem Klassenpfad des Skripts im Build-Skript selbst hinzufügen. Sie tun dies mit der Methode buildcript () und übergeben einen Abschluss, der den Klassenpfad des Erstellungsskripts deklariert.
buildscript { repositories { mavenCentral() } dependencies { classpath group: 'commons-codec', name: 'commons-codec', version: '1.2' } }
Ok, aber was ist der Unterschied zu:
repositories {
mavenCentral()
}
dependencies {
compile group: 'commons-codec', name: 'commons-codec', version: '1.2'
}
Warum ist es zum Beispiel notwendig zu verwenden buildscript
?
Antworten:
Der
buildScript
Block bestimmt, welche Plugins, Taskklassen und anderen Klassen für den Rest des Buildskripts verfügbar sind . OhnebuildScript
Block können Sie alles verwenden, was mit Gradle ausgeliefert wird. Wenn Sie zusätzlich Plugins, Taskklassen oder andere Klassen von Drittanbietern (im Build-Skript!) Verwenden möchten, müssen Sie die entsprechenden Abhängigkeiten imbuildScript
Block angeben .quelle
sample.infotask', name: 'infotask', version: '1.0'
Und Verwendung _uploadArchives Aufgabe es zu lokalen Repo hochladen ../lib ‚ Im einem anderen Projekt , wenn ich meine Aufgabe verwende ich muss schreiben:` buildscript {{Repositorys maven {url‘file: ../ lib '}} Abhängigkeiten {Klassenpfadgruppe:' sample.infotask ', Name:' infotask ', Version:' 1.0 '}} Habe ich recht? Warum müssen wir den BuildScript- Block verwenden? Wenn ich ein lokales Artefakt hochlade, befindet sich das Glas auf meinem Computer. Und muss ich Gradle nur sagen, woher und was ich in meinen Klassenpfad einfügen soll, sonst nichts, was das Besondere hier ist?buildScript
Block verwenden, da Gradle diese Informationen benötigt, um den Rest des Build-Skripts zu verstehen . Deshalb müssen Sie diese Informationen in einem separaten Kanal (dembuildScript
Block) bereitstellen . Technisch gesehen benötigt Gradle diese Informationen , um den Rest des Build-Skripts zu kompilieren und auszuwerten . Unter der Haube passiert, dass Gradle das Build-Skript in zwei Skripte (denbuildScript
Block und alles andere) unterteilt, damit es sie separat verarbeiten kann.dependencies
und in denrepositories
Abschnitten sind Abhängigkeiten aufgeführt, die zum Erstellen Ihrer Quelle und zum Ausführen Ihrer Quelle usw. erforderlich sind.buildscript
ist für diebuild.gradle
Datei selbst. Dies würde also Abhängigkeiten zum Erstellen von RPMsDockerfile
und andere Abhängigkeiten zum Ausführen der Aufgaben in allen abhängigen Bereichen enthaltenbuild.gradle
quelle
buildscript
ist einfach eine Abhängigkeit für Ihr Build-SkriptIch schätze Peters Antwort ... aber es war mir nicht sofort klar, was der Rest des Build-Skripts bedeutete, wie in der Antwort und in der Dokumentation hervorgehoben.
Normalerweise wird die Verwendung abhängiger Funktionen für das Java-Programm oder ein anderes Programm verwendet, das Sie möglicherweise schreiben. Bringing in Spring sagen, ist nicht im Build-Skript zu verwenden, sondern im Java-Programm. Durch
buildscript
das Einfügen in den Abschluss wird sichergestellt, dass die Abhängigkeiten für die Verwendung innerhalb des Gradle-Builds selbst verfügbar sind. Nicht das Ausgabeprogramm.quelle
Der Konfigurationsabschnitt "Buildscript" bezieht sich auf Gradle selbst (dh Änderungen daran, wie Gradle den Build ausführen kann). Daher enthält dieser Abschnitt normalerweise das Android Gradle-Plugin.
quelle
Es ist ein bisschen hoch, aber die Hoffnung hilft.
Für mich begann sich eine klare Unterscheidung zu formen, sobald ich zu verstehen begann, was ein Baustein , eine Methode und eine Aufgabe ist. Wie die Syntax aussieht, wie Sie sie konfigurieren können usw. Ich schlage vor, dass Sie all dies durchgehen. Danach können Sie beginnen, diese Syntax zu verstehen.
Dann ist es sehr wichtig zu wissen, welchen Typ das Objekt build.gradle (eine Instanz der Project-Klasse) hat, um zu wissen, was Sie in einer build.gradle-Datei haben können. Das würde antworten, woher dieses 'buildScript' und andere kommen. Und um Ihre Fähigkeiten / Features (sagen wir Android) zu erweitern, sehen Sie, wie Plugins helfen können.
Last but not least gibt es hier ein sehr gutes Tutorial , das sich mit Schließungen befasst, Delegierten, die die Konzepte sind, die für das Verständnis des Skripts wesentlich sind.
quelle
Ein bisschen mehr Erklärung durch Demonstration der Android-Gradle-Datei der obersten Ebene.
Gradle-Datei auf Modulebene
Was ist "Plugin"? Es sind nur Java-Klassen, die die Plugin-Schnittstelle implementieren. Unter der Schnittstelle gibt es eine Methode "anwenden", um mehrere Aufgabenobjekte mit unterschiedlichen Namen hinzuzufügen. Aufgabe ist eine Klasse, in der wir den Workflow implementieren können. Die Erstellungsaufgabe besteht beispielsweise aus dem Ablauf des Erstellens der App.
Was macht Buildscript? Es definiert, wo die Plugins zu finden sind. Was macht das Plugin? Es umfasst mehrere Aufgaben. Was macht die Aufgabe? Es liefert uns den Bau, die Installation, die Flusen usw.
Mein Verständnis könnte falsch sein. Bitte zögern Sie nicht, mich zu korrigieren, wenn Sie feststellen, dass etwas irreführend ist.
quelle