2012-12-17 20 views
126

Jaka jest różnica między deklarowaniem repozytoriów w sekcji buildScript gradle build lub na poziomie katalogu głównego kompilacji.Gradle zależności buildscript

Opcja 1:

build.gradle:

buildScript { 
    repositories { 
     mavenCentral(); 
    } 
} 

lub

build.gradle:

repositories { 
    mavenCentral(); 
} 

Odpowiedz

115

Repozytoria w buildScript bl ock służą do pobierania zależności od twoich zależności buildScript. Są to zależności, które są umieszczane w ścieżce klasy kompilacji i można się do nich odwoływać z pliku kompilacji. Na przykład dodatkowe wtyczki, które istnieją w Internecie.

Repozytoria na poziomie katalogu głównego służą do pobierania zależności zależnych od projektu. Więc wszystkie zależności potrzebne do kompilacji projektu.

+12

Jeśli muszę Maven centralny zarówno dla mojego buildscript i mój projekt, muszę zadeklarować go dwa razy? –

+13

Tak, trzeba to podać dwukrotnie. –

+0

Jako przykład tego, wtyczka propdeps Spring może zostać dodana do buildscript, aby włączyć słowa kluczowe "provided" i "optional" dla zależności oprócz zwykłych słów kluczowych "compile" i "testCompile". Uwaga: wtyczka wojny oferuje już słowo kluczowe "provided", potrzebujesz tylko propdeps dla projektów słoików, które zostaną rozmieszczone podczas wojny. – Powerlord

12

Skrypt budowania (np. Build.gradle) może mieć pewne zależności do wykonania samego skryptu kompilacji. Użytkownik zamknie te zależności w bloku buildScript. Chapter 4 of Gradle Beyond the Basics opisuje to szczegółowo.

+23

Link nie działa bez uwierzytelnienia. – RaGe

1

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

buildscript zależności:

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

korzeniowe poziom/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 pierwsze chcę wyjaśnić w jednym słowie, które

i) będzie plik jar zależności buildscript pobrane z repozytoriów buildscript z . [Zależność zewnętrzna projektu]

ii) plik jar zależności poziomu korzenia zostanie pobrany z katalogu głównego repozytoriów poziomów. [Na zależność projekt]

Tutaj

przycisków „buildscript” blok sterowania tylko zależności dla samego procesu buildscript nie dla kodu aplikacji. Ponieważ różne wtyczki gradle takie jak gradle-cobertura-plugin, gradle-lint-plugin są znalezione z repozytoriów buildscript. Te wtyczki nie będą odwoływać się jako zależności dla kodu aplikacji.

Ale dla kompilacji projektu i testowania uruchomione pliki jar, takie jak groovy all jar, junit and testng jar, zostaną znalezione z repozytoriów poziomu głównego.

I jeszcze jedna rzecz może być użyta w obu blokach w części:, maven { url("https://plugins.gradle.org/m2/") }. Ponieważ są one używane dla różnych zależności.

zasobów Link:Difference between dependencies within buildscript closure and core

Powiązane problemy