Zależności skryptu kompilacji Gradle

176

Jaka jest różnica między deklarowaniem repozytoriów w buildScriptsekcji kompilacji Gradle lub na poziomie głównym kompilacji.

Opcja 1:

build.gradle :

buildScript {
    repositories {
        mavenCentral();
    }
}

lub

build.gradle :

repositories {
    mavenCentral();
}
Jeff Storey
źródło

Odpowiedzi:

165

Repozytoria w bloku buildScript służą do pobierania zależności twoich zależności buildScript. Są to zależności, które są umieszczane w ścieżce klas twojej kompilacji i do których możesz się odwoływać z pliku kompilacji. Na przykład dodatkowe wtyczki, które istnieją w Internecie.

Repozytoria na poziomie głównym służą do pobierania zależności, od których zależy Twój projekt. Więc wszystkie zależności potrzebne do skompilowania projektu.

Hiery Nomus
źródło
19
Jeśli potrzebuję programu Maven Central zarówno dla mojego skryptu kompilacji, jak i projektu, czy muszę deklarować go dwukrotnie?
Marcin Koziński
18
Tak, wtedy rzeczywiście musisz podać to dwukrotnie.
Hiery Nomus
Jako przykład można dodać wtyczkę Spring propdeps do skryptu buildscript, aby włączyć „dostarczone” i „opcjonalne” słowa kluczowe dla zależności, oprócz zwykłych słów kluczowych „kompilacja” i „testCompile”. Uwaga: Wtyczka war już oferuje słowo kluczowe „dostarczone”, potrzebujesz tylko propdeps dla projektów jar, które zostaną wdrożone w czasie wojny.
Powerlord
14

Chcę dać ci jasną koncepcję. Z tego powodu dołączam kod migawki build.grade dla lepszego zrozumienia.

zależności buildscript:

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

poziom główny / podstawowe zależności:

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

Więc najpierw chcę to wyjaśnić jednym słowem

i) Plik jar zależności buildscript zostanie pobrany z repozytoriów buildscript. [Zależność zewnętrzna projektu]

ii) Plik jar zależności poziomu głównego zostanie pobrany z repozytoriów poziomu głównego. [Dla zależności projektu]

Tutaj,

Blok „buildscript” kontroluje tylko zależności dla samego procesu buildscript, a nie dla kodu aplikacji. Podobnie jak różne wtyczki gradle gradle-cobertura-plugin, gradle-lint-pluginmożna je znaleźć w repozytoriach buildscript. Te wtyczki nie byłyby przywoływane jako zależności dla kodu aplikacji.

Ale w przypadku kompilacji projektu i testowania plików jar, takie jak groovy all jar, junit and testng jar, można znaleźć w repozytoriach poziomu głównego.

I jeszcze jedno , maven { url("https://plugins.gradle.org/m2/") }porcję można wykorzystać w obu blokach. Ponieważ są używane dla różnych zależności.

Link do zasobu: różnica między zależnościami w zamknięciu buildscript i core

SkyWalker
źródło
12

Skrypt budujący (tj. Build.gradle) może mieć pewne zależności do wykonania samego skryptu budującego. Te zależności należy umieścić w bloku buildScript. Szczegółowo opisano to w rozdziale 4 Gradle Beyond the Basics .

user3240644
źródło