Musim semi dengan Maven BOM

1. Ikhtisar

Dalam tutorial singkat ini, kita akan melihat bagaimana Maven, alat yang didasarkan pada konsep Project Object Model (POM), dapat menggunakan BOM atau "Bill Of Material".

Untuk detail lebih lanjut tentang Maven, Anda dapat memeriksa artikel kami Tutorial Apache Maven.

2. Konsep Manajemen Ketergantungan

Untuk memahami apa itu BOM dan untuk apa kita menggunakannya, pertama-tama kita perlu mempelajari konsep dasar.

2.1. Apa Itu Maven POM?

Maven POM adalah file XML yang berisi informasi dan konfigurasi (tentang proyek) yang digunakan oleh Maven untuk mengimpor dependensi dan untuk membangun proyek.

2.2. Apa Itu Maven BOM?

BOM adalah singkatan dari Bill Of Materials. BOM adalah jenis POM khusus yang digunakan untuk mengontrol versi dependensi proyek dan menyediakan tempat sentral untuk menentukan dan memperbarui versi tersebut.

BOM memberikan fleksibilitas untuk menambahkan ketergantungan ke modul kita tanpa mengkhawatirkan versi yang harus kita andalkan.

2.3. Ketergantungan Transitif

Maven dapat menemukan pustaka yang dibutuhkan oleh dependensi kita sendiri di pom.xml dan menyertakannya secara otomatis. Tidak ada batasan jumlah tingkat ketergantungan tempat perpustakaan dikumpulkan.

Konflik di sini muncul ketika 2 dependensi merujuk ke versi berbeda dari artefak tertentu. Manakah yang akan dimasukkan oleh Maven?

Jawabannya di sini adalah “definisi terdekat”. Ini berarti bahwa versi yang digunakan adalah yang paling dekat dengan proyek kita di pohon dependensi. Ini disebut mediasi ketergantungan.

Mari kita lihat contoh berikut untuk memperjelas mediasi dependensi:

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

Contoh ini menunjukkan bahwa proyek A bergantung pada B dan E. B dan E memiliki ketergantungannya sendiri yang menghadapi berbagai versi artefak D. Artefak D 1.0 akan digunakan dalam membangun proyek A karena jalur melalui E lebih pendek.

Ada beberapa teknik berbeda untuk menentukan versi artefak mana yang harus disertakan:

  • Kami selalu dapat menjamin suatu versi dengan mendeklarasikannya secara eksplisit di POM proyek kami. Misalnya, untuk menjamin bahwa D 1.4 digunakan, kita harus menambahkannya secara eksplisit sebagai dependensi di file pom.xml .
  • Kami dapat menggunakan bagian Manajemen Ketergantungan untuk mengontrol versi artefak seperti yang akan kami jelaskan nanti di artikel ini.

2.4. Manajemen Ketergantungan

Sederhananya, Manajemen Ketergantungan adalah mekanisme untuk memusatkan informasi ketergantungan.

Ketika kita memiliki sekumpulan proyek yang mewarisi induk yang sama, kita dapat meletakkan semua informasi ketergantungan dalam file POM bersama yang disebut BOM.

Berikut adalah contoh cara menulis file 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 bisa kita lihat, BOM adalah file POM normal dengan bagian dependencyManagement di mana kita dapat memasukkan semua informasi dan versi artefak.

2.5. Menggunakan File BOM

Ada 2 cara untuk menggunakan file BOM sebelumnya dalam proyek kami dan kemudian kami akan siap untuk mendeklarasikan dependensi kami tanpa harus khawatir tentang nomor versi.

Kita bisa mewarisi dari orang tua:

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

Seperti yang bisa kita lihat, Test proyek kita mewarisi Baeldung-BOM.

Kami juga dapat mengimpor BOM.

Dalam proyek yang lebih besar, pendekatan pewarisan tidak efisien karena proyek hanya dapat mewarisi satu orang tua. Mengimpor adalah alternatif karena kami dapat mengimpor BOM sebanyak yang kami butuhkan.

Mari kita lihat bagaimana kita dapat mengimpor file BOM ke dalam POM proyek 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 prioritas versi artefak adalah:

  1. Versi deklarasi langsung artefak di project pom kami
  2. Versi artefak di proyek induk
  3. Versi di pom yang diimpor, dengan mempertimbangkan urutan file yang diimpor
  4. mediasi ketergantungan
  • Kita dapat menimpa versi artefak dengan mendefinisikan artefak secara eksplisit di pom proyek kita dengan versi yang diinginkan
  • Jika artefak yang sama didefinisikan dengan versi berbeda di 2 BOM yang diimpor, maka versi di file BOM yang dideklarasikan pertama kali akan menang

3. Musim Semi BOM

Kami mungkin menemukan bahwa pustaka pihak ketiga, atau proyek Spring lainnya, menarik ketergantungan transitif ke rilis yang lebih lama. Jika kita lupa untuk mendeklarasikan dependensi langsung secara eksplisit, masalah yang tidak terduga dapat muncul.

Untuk mengatasi masalah tersebut, Maven mendukung konsep ketergantungan BOM.

Kita dapat mengimpor spring-framework-bom di bagian dependencyManagement kita untuk memastikan bahwa semua dependensi Spring memiliki versi yang sama:

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

Kami tidak perlu menentukan atribut versi saat menggunakan artefak Spring seperti pada contoh berikut:

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

4. Kesimpulan

Dalam artikel singkat ini, kami menunjukkan Konsep Bill-Of-Material Maven dan cara memusatkan informasi dan versi artefak di POM umum.

Sederhananya, kami kemudian dapat mewarisi atau mengimpornya untuk memanfaatkan manfaat BOM.

Contoh kode dalam artikel dapat ditemukan di GitHub.