web-dev-qa-db-de.com

Zweck des Buildscript-Blocks in Gradle

Ich bin neu in Gradle und lese die Dokumentation, verstehe aber einige Teile davon nicht. Einer dieser Teile ist mit dem Block buildscript verbunden. Was ist seine Aufgabe?

Wenn Ihr Erstellungsskript externe Bibliotheken verwenden muss, können Sie diese dem Klassenpfad des Skripts im Erstellungsskript selbst hinzufügen. Dazu verwenden Sie die buildscript () -Methode und übergeben einen Closure, der den Klassenpfad des Build-Skripts 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 beispielsweise erforderlich, buildscript zu verwenden?

200
Xelian

Der buildScript -Block bestimmt, welche Plugins, Taskklassen und anderen Klassen für die Verwendung im Rest des Build-Skripts verfügbar sind. Ohne einen buildScript -Block können Sie alles verwenden, was im Lieferumfang von Gradle enthalten ist. Wenn Sie zusätzlich Plugins, Task-Klassen oder andere Klassen von Drittanbietern (im Build-Skript!) Verwenden möchten, müssen Sie die entsprechenden Abhängigkeiten im Block buildScript angeben.

157
  • In den Abschnitten dependencies und repositories auf globaler Ebene werden die Abhängigkeiten aufgelistet, die zum Erstellen Ihrer Quelle und zum Ausführen Ihrer Quelle usw. erforderlich sind.
  • Das buildscript ist für die Datei build.gradle Selbst. Dies würde also Abhängigkeiten zum Beispiel zum Erstellen von RPMs, Dockerfile und andere Abhängigkeiten zum Ausführen der Tasks in allen abhängigen build.gradle Enthalten.
126
Ashish

Ich schätze Peters Antwort ... aber es war mir nicht sofort klar, was der Rest des Build-Skripts bedeutet, wie in der Antwort und in der Dokumentation hervorgehoben.

In der Regel wird die abhängige Funktionalität für das Programm Java oder ein anderes Programm verwendet, das Sie möglicherweise schreiben. Bring in Spring soll nicht im Build-Skript, sondern im Programm Java verwendet werden. Durch das Einfügen in die buildscript -Ende wird sichergestellt, dass die Abhängigkeiten für die Verwendung innerhalb des Gradle-Builds selbst verfügbar sind. Nicht das Ausgabeprogramm.

61
Daniel Gerson

Der "Buildscript" -Konfigurationsabschnitt ist für Gradle selbst vorgesehen (d. H. Änderungen, wie Gradle den Build ausführen kann). Daher enthält dieser Abschnitt normalerweise das Android Gradle-Plugin.

8
Maulik Baraiya

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 , Methode und 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, den Typ des Objekts build.gradle (eine Instanz der Project-Klasse) zu kennen, um zu wissen, was in einer build.gradle-Datei enthalten sein kann. Das würde antworten, woher das 'buildScript' und andere kommen. Und um Ihre Fähigkeiten/Funktionen zu erweitern (sagen wir mal Android), sehen Sie, wie Plugins helfen kann.

Last but not least gibt es hier ein sehr gutes Tutorial , das über Closures spricht, Delegates, die die Konzepte sind, die zum Verständnis des Skripts unerlässlich sind.

2
stdout

Ein bisschen mehr Erklärung durch Demonstration Android Gradle-Datei der obersten Ebene.

buildscript {
    // this is where we are going to find the libraries defined in "dependencies block" at below
    repositories {
        google()
        jcenter()
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }

    // everything listed in the dependencies is actually a plugin, which we'll do "apply plugin" in our module level gradle file.
    dependencies {
        classpath 'com.Android.tools.build:gradle:3.4.2' // this is Android gradle plugin
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // kotlin gradle plugin
    }
}

gradle-Datei auf Modulebene

apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'

Was ist "Plugin"? Dies sind nur Java Klassen, die die Plugin-Schnittstelle implementieren. Unter der Schnittstelle gibt es eine Methode "apply", um mehrere Aufgabenobjekte mit unterschiedlichen Namen hinzuzufügen. Task ist eine Klasse, in der wir den Workflow implementieren können Beispielsweise besteht die Build-Aufgabe aus dem Ablauf des Erstellens der App.

Also, was macht Buildscript? Es definiert, wo sich die Plugins befinden. Was macht das Plugin? Es umfasst mehrere Aufgaben. Was macht die Aufgabe? Es versorgt uns mit dem Bauen, Installieren, Flusen usw.

Mein Verständnis könnte falsch sein. Bitte zögern Sie nicht, mich zu korrigieren, wenn Sie etwas irreführend finden.

1
KunYu Tsai