Pengurusan Ketergantungan dalam Gradle

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan melihat menyatakan kebergantungan dalam skrip build Gradle. Sebagai contoh, kami akan menggunakan Gradle 6.7.

2. Struktur Khas

Mari kita mulakan dengan skrip Gradle sederhana untuk projek Java:

plugins { id 'java' } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter:2.3.4.RELEASE' testImplementation 'org.springframework.boot:spring-boot-starter-test:2.3.4.RELEASE' }

Seperti yang dapat dilihat di atas, kami mempunyai tiga blok kod: plugin , repositori, dan dependensi .

Pertama, blok plugin memberitahu kita bahawa ini adalah projek Java. Kedua, blok kebergantungan menyatakan versi 2.3.4. SIARAN pergantungan spring-boot-starter yang diperlukan untuk menyusun kod sumber pengeluaran projek. Selain itu, ia juga menyatakan bahawa suite ujian projek memerlukan ujian spring-boot-starter-test untuk disusun.

Gradle build menarik semua kebergantungan dari repositori Maven Central, seperti yang ditentukan oleh blok repositori .

Mari fokus pada bagaimana kita dapat menentukan kebergantungan.

3. Konfigurasi Ketergantungan

Terdapat konfigurasi yang berbeza di mana kita dapat menyatakan kebergantungan. Dalam hal ini, kita dapat memilih untuk menjadi lebih tepat, seperti yang akan kita lihat di kemudian hari.

3.1. Cara Menyatakan Pergantungan

Untuk memulakan, konfigurasi mempunyai 4 bahagian:

  • kumpulan - pengecam organisasi, syarikat, atau projek
  • nama - pengecam pergantungan
  • versi - yang kami mahu import
  • pengkelasan - berguna untuk membezakan pergantungan dengan kumpulan , nama , dan versi yang sama

Kita boleh menyatakan kebergantungan dalam dua format. Format yang dikontrak memungkinkan kita untuk menyatakan kebergantungan sebagai String :

implementation 'org.springframework.boot:spring-boot-starter:2.3.4.RELEASE'

Sebaliknya, format lanjutan membolehkan kita menulisnya sebagai Peta :

implementation group:'org.springframework.boot', name: 'spring-boot-starter', version: '2.3.4.RELEASE'

3.2. Jenis-Jenis Konfigurasi

Selain itu, Gradle menyediakan banyak jenis konfigurasi kebergantungan:

  • api - digunakan untuk membuat pergantungan jelas dan mendedahkannya di jalan kelas. Sebagai contoh, ketika melaksanakan perpustakaan agar transparan kepada pengguna perpustakaan
  • pelaksanaan - diperlukan untuk menyusun kod sumber pengeluaran dan bersifat dalaman. Mereka tidak terdedah di luar bungkusan
  • compileOnly - digunakan apabila perlu diisytiharkan hanya pada waktu kompilasi, seperti anotasi sumber sahaja atau pemproses anotasi. Mereka tidak muncul di runtime classpath atau test classpath
  • compileOnlyApi - digunakan apabila diperlukan pada waktu kompilasi dan ketika mereka perlu dilihat di jalan kelas untuk pengguna
  • runtimeOnly - digunakan untuk menyatakan kebergantungan yang hanya diperlukan pada waktu runtime dan tidak tersedia pada waktu kompilasi
  • testImplementation - diperlukan untuk menyusun ujian
  • testCompileOnly - hanya diperlukan pada masa kompilasi ujian
  • testRuntimeOnly - diperlukan hanya pada masa ujian dijalankan

Kita harus perhatikan bahawa versi terbaru Gradle tidak menggunakan beberapa konfigurasi seperti kompilasi , testCompile , runtime, dan testRuntime. Pada masa penulisan, mereka masih tersedia.

4. Jenis Pergantungan Luaran

Mari kita selidiki jenis kebergantungan luaran yang kita hadapi dalam skrip binaan Gradle.

4.1. Pergantungan Modul

Pada dasarnya, cara yang paling umum untuk menyatakan kebergantungan adalah dengan merujuk repositori. Repositori Gradle adalah kumpulan modul yang disusun mengikut kumpulan , nama , dan versi .

Sebenarnya, Gradle menurunkan kebergantungan dari repositori yang ditentukan di dalam blok repositori :

repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter:2.3.4.RELEASE' }

4.2. Kebergantungan Fail

Memandangkan projek tidak selalu menggunakan pengurusan dependensi automatik, beberapa projek mengatur dependensi sebagai sebahagian daripada kod sumber atau sistem fail tempatan. Oleh itu, kita perlu menentukan lokasi tepat di mana pergantungannya.

Untuk tujuan ini, kita dapat menggunakan fail untuk memasukkan koleksi ketergantungan:

dependencies { runtimeOnly files('libs/lib1.jar', 'libs/lib2.jar') }

Begitu juga, kita dapat menggunakan filetree untuk memasukkan hierarki fail jar dalam direktori:

dependencies { runtimeOnly fileTree('libs') { include '*.jar' } }

4.3. Ketergantungan Projek

Oleh kerana satu projek boleh bergantung pada yang lain untuk menggunakan semula kod, Gradle menawarkan kita peluang untuk melakukannya.

Katakanlah kami ingin menyatakan bahawa projek kami bergantung pada projek bersama :

 dependencies { implementation project ( ':shared' ) } 

4.4. Kebergantungan Gradle

Dalam kes tertentu, seperti mengembangkan tugas atau plugin, kita dapat menentukan ketergantungan yang termasuk dalam versi Gradle yang kita gunakan:

dependencies { implementation gradleApi() }

5. buildScript

As we saw before, we can declare the external dependencies of our source code and tests inside the dependencies block. Similarly, the buildScript block allows us to declare the Gradle build's dependencies, such as third-party plugins and task classes. Particularly, without a buildScript block, we can use only Gradle out-of-the-box features.

Below we declare that we want to use the Spring Boot plugin by downloading it from Maven Central:

buildscript { repositories { mavenCentral() } dependencies { classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.3.4.RELEASE' } } apply plugin: 'org.springframework.boot'

Hence we need to specify the source from which we'll download external dependencies because there isn't a default one.

What's described above is related to older versions of Gradle. Instead, in newer versions, it's possible to use a more concise form:

plugins { id 'org.springframework.boot' version '2.3.4.RELEASE' }

6. Conclusion

Dalam artikel ini, kami melihat kebergantungan Gradle, cara menyatakannya, dan jenis konfigurasi yang berbeza.

Memandangkan perkara ini, kod sumber untuk artikel ini tersedia di GitHub.