Gradle-Buildscript-Abhängigkeiten

175

Was ist der Unterschied zwischen der Deklaration von Repositorys im buildScriptAbschnitt des Gradle-Builds oder in der Stammebene des Builds?

Option 1:

build.gradle :

buildScript {
    repositories {
        mavenCentral();
    }
}

oder

build.gradle :

repositories {
    mavenCentral();
}
Jeff Storey
quelle

Antworten:

164

Die Repositorys im buildScript-Block werden verwendet, um die Abhängigkeiten Ihrer buildScript-Abhängigkeiten abzurufen. Dies sind die Abhängigkeiten, die auf den Klassenpfad Ihres Builds gesetzt werden und auf die Sie in Ihrer Build-Datei verweisen können. Zum Beispiel zusätzliche Plugins, die im Internet existieren.

Die Repositorys auf Stammebene werden verwendet, um die Abhängigkeiten abzurufen, von denen Ihr Projekt abhängt. Also alle Abhängigkeiten, die Sie zum Kompilieren Ihres Projekts benötigen.

Hiery Nomus
quelle
19
Wenn ich maven central sowohl für mein Buildscript als auch für mein Projekt benötige, muss ich es zweimal deklarieren?
Marcin Koziński
18
Ja, Sie müssen es dann tatsächlich zweimal angeben.
Hiery Nomus
Als Beispiel hierfür kann das Spring-Propdeps-Plugin zum Buildscript hinzugefügt werden, um zusätzlich zu den üblichen Schlüsselwörtern "compile" und "testCompile" "bereitgestellte" und "optionale" Schlüsselwörter für Abhängigkeiten zu aktivieren. Hinweis: Das Kriegs-Plugin bietet bereits das Schlüsselwort "bereitgestellt". Sie benötigen lediglich Propdeps für JAR-Projekte, die innerhalb eines Krieges bereitgestellt werden.
Powerlord
14

Ich möchte Ihnen eine klare Vorstellung geben. Aus diesem Grund füge ich zum besseren Verständnis den Snapshot-Code build.grade hinzu .

Buildscript-Abhängigkeiten:

buildscript {
    repositories {
        maven { url("https://plugins.gradle.org/m2/") }
    }

    dependencies {
        classpath 'net.saliman:gradle-cobertura-plugin:2.3.2'
        classpath 'com.netflix.nebula:gradle-lint-plugin:latest.release'
    }
}

Abhängigkeiten auf Stammebene / Kern:

repositories{
    mavenLocal()
    maven { url("https://plugins.gradle.org/m2/") }
    maven { url "https://repo.spring.io/snapshot" }
}

dependencies {
        //Groovy
        compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.3.10'

        //Spock Test
        compile group: 'org.spockframework', name: 'spock-core', version: '1.0-groovy-2.3'

        //Test
        testCompile group: 'junit', name: 'junit', version: '4.10'
        testCompile group: 'org.testng', name: 'testng', version: '6.8.5'
}

Also, zuerst möchte ich das in einem Wort klarstellen

i) Die JAR-Datei für Buildscript-Abhängigkeiten wird aus den Buildscript-Repositorys heruntergeladen. [Externe Projektabhängigkeit]

ii) Die JAR-Datei für Abhängigkeiten auf Stammebene wird aus den Repositorys auf Stammebene heruntergeladen. [Für Projektabhängigkeit]

Hier,

Der Block "Buildscript" steuert nur Abhängigkeiten für den Buildscript-Prozess selbst, nicht für den Anwendungscode. Da verschiedene gradle Plugin wie gradle-cobertura-plugin, gradle-lint-pluginaus buildscript repos gefunden. Diese Plugins werden nicht als Abhängigkeiten für den Anwendungscode bezeichnet.

Aber für die Projektkompilierung und den Testlauf werden JAR-Dateien wie groovy all jar, junit and testng jaraus Repositorys auf Stammebene gefunden.

Und eine andere Sache , maven { url("https://plugins.gradle.org/m2/") }Portion kann in beiden Blöcken verwendet werden. Weil sie für verschiedene Abhängigkeiten verwendet werden.

Ressourcenverknüpfung: Unterschied zwischen Abhängigkeiten innerhalb des Buildscript-Abschlusses und des Kerns

SkyWalker
quelle
12

Das Build-Skript (dh build.gradle) kann einige Abhängigkeiten für die Ausführung des Build-Skripts selbst aufweisen. Sie würden diese Abhängigkeiten in den buildScript-Block einschließen. Kapitel 4 von Gradle Beyond the Basics beschreibt es ausführlich.

user3240644
quelle