Musim bunga dengan Maven BOM

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan melihat bagaimana Maven, sebuah alat berdasarkan konsep Model Objek Objek (POM), dapat menggunakan BOM atau "Bill Of Materials".

Untuk keterangan lebih lanjut mengenai Maven, anda boleh membaca artikel kami Apache Maven Tutorial.

2. Konsep Pengurusan Ketergantungan

Untuk memahami apa itu BOM dan untuk apa kita dapat menggunakannya, pertama kita perlu mempelajari konsep asas.

2.1. Apa itu Maven POM?

Maven POM adalah fail XML yang mengandungi maklumat dan konfigurasi (mengenai projek) yang digunakan oleh Maven untuk mengimport pergantungan dan membina projek.

2.2. Apa itu Maven BOM?

BOM bermaksud Bill Of Materials. BOM adalah jenis POM khas yang digunakan untuk mengendalikan versi kebergantungan projek dan menyediakan tempat utama untuk menentukan dan mengemas kini versi tersebut.

BOM memberikan fleksibiliti untuk menambahkan kebergantungan pada modul kami tanpa perlu risau tentang versi yang harus kami bergantung.

2.3. Pergantungan Transitif

Maven dapat menemui perpustakaan yang diperlukan oleh pergantungan kita sendiri di pom.xml kita dan menyertakannya secara automatik. Tidak ada had untuk jumlah tahap kebergantungan dari mana perpustakaan dikumpulkan.

Konflik di sini timbul apabila 2 kebergantungan merujuk kepada versi artifak yang berbeza. Mana yang akan dimasukkan oleh Maven?

Jawapannya di sini adalah "definisi terdekat". Ini bermaksud bahawa versi yang digunakan akan menjadi yang paling dekat dengan projek kami di pohon pergantungan. Ini dipanggil perantaraan pergantungan.

Mari kita lihat contoh berikut untuk menjelaskan perantaraan pergantungan:

A -> B -> C -> D 1.4 and A -> E -> D 1.0

Contoh ini menunjukkan bahawa projek A bergantung pada B dan E. B dan E mempunyai kebergantungan mereka sendiri yang menghadapi artifak D versi yang berbeza . Artifak D 1.0 akan digunakan dalam pembinaan projek A kerana laluan melalui E lebih pendek.

Terdapat teknik yang berbeza untuk menentukan versi artifak mana yang harus disertakan:

  • Kami selalu dapat menjamin versi dengan menyatakannya secara eksplisit dalam POM projek kami. Sebagai contoh, untuk menjamin bahawa D 1.4 digunakan, kita harus menambahkannya secara eksplisit sebagai ketergantungan dalam fail pom.xml .
  • Kita boleh menggunakan bahagian Dependency Management untuk mengawal versi artifak seperti yang akan kita jelaskan kemudian dalam artikel ini.

2.4. Pengurusan Ketergantungan

Secara sederhana, Dependency Management adalah mekanisme untuk memusatkan maklumat ketergantungan.

Apabila kita mempunyai sekumpulan projek yang mewarisi ibu bapa biasa, kita dapat memasukkan semua maklumat kebergantungan dalam fail POM bersama yang disebut BOM.

Berikut adalah contoh cara menulis fail BOM:

 4.0.0 baeldung Baeldung-BOM 0.0.1-SNAPSHOT pom BaelDung-BOM parent pom    test a 1.2   test b 1.0 compile   test c 1.0 compile    

Seperti yang kita lihat, BOM adalah fail POM biasa dengan bahagian dependencyManagement di mana kita dapat memasukkan semua maklumat dan versi artifak.

2.5. Menggunakan Fail BOM

Terdapat 2 cara untuk menggunakan fail BOM sebelumnya dalam projek kami dan kemudian kami akan bersedia untuk menyatakan pergantungan kami tanpa perlu risau tentang nombor versi.

Kita boleh mewarisi dari ibu bapa:

 4.0.0 baeldung Test 0.0.1-SNAPSHOT pom Test  baeldung Baeldung-BOM 0.0.1-SNAPSHOT  

Seperti yang dapat kita lihat, projek kita Uji mewarisi Baeldung-BOM.

Kami juga boleh mengimport BOM.

Dalam projek yang lebih besar, pendekatan pewarisan tidak efisien kerana projek itu hanya dapat mewarisi ibu bapa tunggal. Mengimport adalah alternatif kerana kita boleh mengimport BOM sebanyak yang kita perlukan.

Mari lihat bagaimana kita dapat mengimport fail BOM ke dalam POM projek kita:

 4.0.0 baeldung Test 0.0.1-SNAPSHOT pom Test    baeldung Baeldung-BOM 0.0.1-SNAPSHOT pom import    

2.6. Menimpa Ketergantungan BOM

Urutan keutamaan versi artifak adalah:

  1. Versi deklarasi langsung artifak dalam pom projek kami
  2. Versi artifak dalam projek induk
  3. Versi dalam pom yang diimport, dengan mempertimbangkan urutan mengimport fail
  4. perantaraan pergantungan
  • Kami boleh menimpa versi artifak dengan mendefinisikan artifak secara eksplisit di pom projek kami dengan versi yang diinginkan
  • Sekiranya artifak yang sama ditentukan dengan versi yang berbeza dalam 2 BOM yang diimport, maka versi dalam fail BOM yang dinyatakan pertama akan menang

3. Musim bunga BOM

Kami mungkin mendapati bahawa perpustakaan pihak ketiga, atau projek Spring yang lain, bergantung pada pergantungan transitif kepada pelepasan yang lebih lama. Sekiranya kita lupa untuk menyatakan ketergantungan langsung secara eksplisit, masalah tidak dijangka dapat timbul.

Untuk mengatasi masalah tersebut, Maven menyokong konsep kebergantungan BOM.

Kami boleh mengimport spring-framework-bom di dependencyManagement kami untuk memastikan bahawa semua dependensi Spring berada pada versi yang sama:

   org.springframework spring-framework-bom 4.3.8.RELEASE pom import   

Kami tidak perlu menentukan atribut versi ketika kami menggunakan artifak Spring seperti dalam contoh berikut:

  org.springframework spring-context   org.springframework spring-web  

4. Kesimpulan

Dalam artikel ringkas ini, kami menunjukkan Konsep Maven Bill-Of-Material dan bagaimana memusatkan maklumat dan versi artifak dalam POM umum.

Secara sederhana, kita boleh mewarisi atau mengimportnya untuk memanfaatkan faedah BOM.

Contoh kod dalam artikel boleh didapati di GitHub.