Dependensi skrip pembangunan Gradle

176

Apa perbedaan antara mendeklarasikan repositori di buildScriptbagian gradle build atau di level root build.

Pilihan 1:

build.gradle :

buildScript {
    repositories {
        mavenCentral();
    }
}

atau

build.gradle :

repositories {
    mavenCentral();
}
Jeff Storey
sumber

Jawaban:

165

Repositori dalam blok buildScript digunakan untuk mengambil dependensi dependensi buildScript Anda. Ini adalah dependensi yang diletakkan pada classpath dari build Anda dan yang dapat Anda rujuk dari file build Anda. Misalnya plugin tambahan yang ada di internet.

Repositori di tingkat root digunakan untuk mengambil dependensi yang bergantung pada proyek Anda. Jadi semua dependensi yang Anda butuhkan untuk mengkompilasi proyek Anda.

Nomery Hiery
sumber
19
Jika saya perlu pakar pusat untuk skrip dan proyek saya, apakah saya harus mendeklarasikannya dua kali?
Marcin Koziński
18
Ya, Anda harus menentukannya dua kali.
Hiery Nomus
Sebagai contohnya, plugin Spring propdeps dapat ditambahkan ke buildscript untuk mengaktifkan kata kunci "yang disediakan" dan "opsional" untuk dependensi selain kata kunci "kompilasi" dan "testCompile" yang biasa. Catatan: Plugin perang sudah menawarkan kata kunci "yang disediakan", Anda hanya perlu propdep untuk proyek-proyek jar yang akan digunakan dalam perang.
Powerlord
14

Saya ingin memberi Anda konsepsi yang jelas. Untuk alasan ini, saya melampirkan kode snapshot build.grade untuk pemahaman yang lebih baik.

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

tingkat akar / ketergantungan inti:

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

Jadi, Pertama saya ingin mengklarifikasi dengan satu kata itu

i) file jar dependensi buildscript akan diunduh dari repositori buildscript. [Ketergantungan eksternal proyek]

ii) file jar dependensi level root akan diunduh dari repositori level root. [Untuk ketergantungan proyek]

Sini,

Blok "buildscript" hanya mengontrol dependensi untuk proses buildscript itu sendiri, bukan untuk kode aplikasi. Seperti berbagai plugin gradle gradle-cobertura-plugin, gradle-lint-pluginditemukan dari repo buildscript. Plugin tersebut tidak akan dirujuk sebagai dependensi untuk kode aplikasi.

Tetapi untuk kompilasi proyek dan menguji menjalankan file jar seperti groovy all jar, junit and testng jarakan ditemukan dari repositori tingkat root.

Dan satu hal lagi , maven { url("https://plugins.gradle.org/m2/") }porsi dapat digunakan di kedua blok. Karena mereka digunakan untuk dependensi yang berbeda.

Resource Link: Perbedaan antara dependensi di dalam buildscript closure dan core

SkyWalker
sumber
12

Skrip build (mis. Build.gradle) mungkin memiliki beberapa dependensi untuk eksekusi skrip build itu sendiri. Anda akan menyertakan dependensi tersebut di dalam blok buildScript. Bab 4 Gradle Beyond the Basics menjelaskannya secara rinci.

pengguna3240644
sumber