2012-12-17 11 views
126

Was ist der Unterschied zwischen der Deklaration von Repositories im buildScript-Bereich des Gradle-Builds oder in der Root-Ebene des Builds?Gradle Buildscript-Abhängigkeiten

Option 1:

build.gradle:

buildScript { 
    repositories { 
     mavenCentral(); 
    } 
} 

oder

build.gradle:

repositories { 
    mavenCentral(); 
} 

Antwort

115

Die Verwahrungsstellen in der buildScript bl Socket 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 aus Ihrer Build-Datei verweisen können. Zum Beispiel zusätzliche Plugins, die im Internet existieren.

Die Repositorys auf der Stammebene werden verwendet, um die Abhängigkeiten abzurufen, von denen Ihr Projekt abhängig ist. Also alle Abhängigkeiten, die Sie benötigen, um Ihr Projekt zu kompilieren.

+12

Wenn ich Maven zentrale müssen beide für meine buildscript und mein Projekt, mache ich es zweimal erklären müssen? –

+13

Ja, Sie müssen es dann zweimal angeben. –

+0

Als Beispiel kann das Spring-PropDep-Plugin zum Buildskript hinzugefügt werden, um zusätzlich zu den üblichen "compile" - und "testCompile" -Schlüsselwörtern "bereitgestellte" und "optionale" Schlüsselwörter für Abhängigkeiten zu aktivieren. Hinweis: Das War-Plugin bietet bereits das Schlüsselwort "bereitgestellt" an. Sie benötigen lediglich propdeps für jar-Projekte, die in einem Krieg eingesetzt werden. – Powerlord

12

Das Build-Skript (d. H. Build.gradle) kann einige Abhängigkeiten für die Ausführung des Build-Skripts selbst haben. Sie würden diese Abhängigkeiten innerhalb des BuildScript-Blocks einschließen. Chapter 4 of Gradle Beyond the Basics beschreibt es im Detail.

+23

Link funktioniert nicht ohne Authentifizierung. – RaGe

1

Ich möchte Ihnen eine klare Vorstellung geben. Aus diesem Grund füge ich build.grade Snapshot-Code für ein besseres Verständnis bei.

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' 
    } 
} 

Root-Ebene/Kern Abhängigkeiten:

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' 
} 

So Zuerst möchte ich in Wort klarstellen, dass

i) Buildscript-Abhängigkeiten JAR-Datei wird heruntergeladen von Buildscript-Repositories. [Projekt externe Abhängigkeit]

ii) Stammebene Abhängigkeiten JAR-Datei wird von Root Level-Repositories heruntergeladen werden. [Für Projektabhängigkeit]

Hier

Der „buildscript“ Block nur steuert Abhängigkeiten für die buildscript Prozess selbst, nicht für den Anwendungscode. Als verschiedene Gradle Plugins wie gradle-cobertura-plugin, gradle-lint-plugin werden von Buildscript Repos gefunden. Diese Plugins würden nicht als Abhängigkeiten für den Anwendungscode referenziert.

Aber für die Projektkompilierung und den Testlauf werden JAR-Dateien wie groovy all jar, junit and testng jar aus Stamm-Repositories gefunden.

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

Ressourcenlink:Difference between dependencies within buildscript closure and core

Verwandte Themen