Skop Ketergantungan Maven

1. Pengenalan

Maven adalah salah satu alat binaan yang paling popular di ekosistem Java, dan salah satu ciri utamanya adalah pengurusan kebergantungan.

Dalam artikel ini, kami akan menerangkan dan meneroka mekanisme yang membantu dalam menguruskan pergantungan transitif dalam projek Maven - ruang lingkup ketergantungan.

2. Pergantungan Transitif

Ringkasnya, terdapat dua jenis pergantungan di Maven langsung dan transitif.

Pergantungan langsung adalah yang secara eksplisit dimasukkan dalam projek. Ini boleh dimasukkan dalam projek menggunakan teg:

 junit junit 4.12 

Pergantungan transitif, sebaliknya, adalah kebergantungan yang diperlukan oleh kebergantungan langsung kita. Pergantungan transitif yang diperlukan dimasukkan secara automatik dalam projek kami oleh Maven.

Kami dapat menyenaraikan semua kebergantungan termasuk pergantungan transitif dalam projek menggunakan: ketergantungan mvn: perintah pokok .

3. Skop Ketergantungan

Skop ketergantungan dapat membantu untuk membatasi ketergantungan kebergantungan dan mereka mengubah jalan kelas untuk pelbagai tugas yang dibina. Maven mempunyai 6 ruang lingkup kebergantungan lalai .

Dan penting untuk memahami bahawa setiap ruang lingkup - kecuali import - mempunyai kesan terhadap pergantungan transitif.

3.1. Menyusun

Ini adalah skop lalai apabila tidak ada ruang lingkup lain yang disediakan.

Ketergantungan dengan skop ini tersedia di jalan kelas projek dalam semua tugas binaan dan mereka disebarkan ke projek bergantung.

Lebih penting lagi, kebergantungan ini juga bersifat transitif:

 commons-lang commons-lang 2.6 

3.2. Dengan syarat

Skop ini digunakan untuk menandakan kebergantungan yang harus diberikan pada waktu berjalan oleh JDK atau sebuah wadah , maka namanya.

Kes penggunaan yang baik untuk skop ini adalah aplikasi web yang digunakan di beberapa wadah, di mana wadah itu sudah menyediakan beberapa perpustakaan itu sendiri.

Sebagai contoh, pelayan web yang sudah menyediakan Servlet API pada waktu berjalan, jadi dalam projek kami, kebergantungan tersebut dapat ditentukan dengan ruang lingkup yang disediakan :

 javax.servlet servlet-api 2.5 provided 

Yang disediakan kebergantungan yang ada hanya pada menyusun masa dan di classpath ujian projek; apa lagi, mereka tidak transitif.

3.3. Masa Jalan

Ketergantungan dengan skop ini diperlukan pada waktu berjalan , tetapi tidak diperlukan untuk penyusunan kod projek. Oleh kerana itu, kebergantungan yang ditandai dengan skop runtime akan ada di runtime dan classpath ujian, tetapi mereka akan hilang dari compile classpath.

Contoh kebergantungan yang baik yang harus menggunakan skop runtime adalah pemacu JDBC:

 mysql mysql-connector-java 6.0.6 runtime 

3.4. Uji

Skop ini digunakan untuk menunjukkan bahawa ketergantungan tidak diperlukan pada waktu operasi standar aplikasi, tetapi hanya digunakan untuk tujuan pengujian. Pergantungan ujian tidak transitif dan hanya ada untuk jalan kelas ujian dan pelaksanaan.

Kes penggunaan standard untuk skop ini adalah menambah perpustakaan ujian seperti JUnit ke aplikasi kami:

 junit junit 4.12 test 

3.5. Sistem

Skop sistem hampir sama dengan skop yang disediakan . Perbezaan utama antara kedua-dua ruang lingkup tersebut adalah bahawa sistem memerlukan kita secara langsung menunjuk ke balang tertentu pada sistem.

Perkara penting yang perlu diingat ialah membina projek dengan kebergantungan skop sistem mungkin gagal pada mesin yang berlainan jika kebergantungan tidak ada atau berada di tempat yang berbeza daripada sistem yang ditunjukkan oleh PathPath :

 com.baeldung custom-dependency 1.3.2 system ${project.basedir}/libs/custom-dependency-1.3.2.jar 

3.6. Import

Skop ini ditambahkan di Maven 2.0.9 dan hanya tersedia untuk jenis pom kebergantungan . Kami akan bercakap lebih banyak mengenai jenis kebergantungan dalam artikel masa depan.

Import menunjukkan bahawa kebergantungan ini harus diganti dengan semua pergantungan berkesan yang dinyatakan dalam POMnya:

 com.baeldung custom-project 1.3.2 pom import 

4. Skop dan Transitiviti

Setiap skop ketergantungan mempengaruhi pergantungan transitif dengan caranya sendiri. Ini bermaksud bahawa pergantungan transitif yang berbeza mungkin berakhir dalam projek dengan ruang lingkup yang berbeza.

Walau bagaimanapun, kebergantungan dengan skop yang disediakan dan ujian tidak akan dimasukkan dalam projek utama.

Kemudian:

  • Untuk skop kompilasi , semua ketergantungan dengan skop runtime akan ditarik dengan skop runtime , dalam projek dan semua dependensi dengan skop kompilasi akan ditarik dengan skop kompilasi , dalam projek
  • Untuk skop yang disediakan , kedua-dua pergantungan skop runtime dan kompilasi akan ditarik dengan skop yang disediakan , dalam projek
  • Untuk skop ujian , kebergantungan transitif skema runtime dan compile akan ditarik dengan skop ujian , dalam projek
  • Untuk skop runtime , kedua-dua runtime dan compile skop pergantungan transitif akan ditarik dengan skop runtime , dalam projek

5. Kesimpulan

Dalam tutorial ringkas ini, kami memfokuskan pada lingkup ketergantungan Maven, tujuannya, dan perincian bagaimana mereka beroperasi.

Sekiranya anda ingin menggali lebih dalam ke Maven, dokumentasi adalah tempat yang baik untuk bermula.