Gunakan Versi Terbaru Ketergantungan di Maven

1. Ikhtisar

Mengupgrade dependensi Maven secara manual selalu menjadi pekerjaan yang membosankan, terutama dalam project dengan banyak library yang sering dirilis.

Dalam tutorial ini, kita akan belajar bagaimana memanfaatkan Plugin Versi Maven untuk menjaga dependensi kita tetap up-to-date .

Yang terpenting, ini bisa sangat berguna saat mengimplementasikan pipeline Continuous Integration yang secara otomatis mengupgrade dependensi, menguji apakah semuanya masih berfungsi dengan baik, dan melakukan atau mengembalikan hasilnya, mana saja yang sesuai.

2. Sintaks Rentang Versi Maven

Kembali di hari Maven2, pengembang dapat menentukan rentang versi di mana artefak akan ditingkatkan tanpa perlu intervensi manual.

Sintaks ini masih valid, digunakan di beberapa proyek di luar sana dan karenanya perlu diketahui:

Meskipun demikian, kita harus menghindarinya demi Plugin Versi Maven jika memungkinkan, karena memajukan versi konkret dari luar memberi kita kendali yang lebih besar daripada membiarkan Maven menangani keseluruhan operasi sendiri.

2.1. Sintaks yang Tidak Berlaku Lagi

Maven2 juga menyediakan dua nilai metaversion khusus untuk mencapai hasil: LATEST dan RELEASE .

TERBARU mencari versi terbaru yang mungkin, sedangkan RELEASE ditujukan pada versi non-SNAPSHOT terbaru.

Mereka memang masih benar-benar valid untuk resolusi dependensi reguler .

Namun, metode peningkatan versi lama ini menyebabkan ketidakpastian di mana CI membutuhkan reproduktifitas. Karenanya, mereka sudah tidak digunakan lagi untuk resolusi dependensi plugin.

3. Versi Plugin Maven

Versi Maven Plugin adalah cara standar de facto untuk menangani manajemen versi saat ini.

Dari perbandingan tingkat tinggi antara repositori jarak jauh hingga penguncian stempel waktu tingkat rendah untuk versi SNAPSHOT, daftar sasarannya yang sangat besar memungkinkan kami untuk menangani setiap aspek proyek kami yang melibatkan ketergantungan.

Sementara banyak dari mereka berada di luar cakupan tutorial ini, mari kita lihat lebih dekat yang akan membantu kita dalam proses peningkatan.

3.1. Kasus Uji

Sebelum memulai, mari tentukan kasus uji kita:

  • tiga RILIS dengan versi hard-code
  • satu RILIS dengan versi properti, dan
  • satu SNAPSHOT
  commons-io commons-io 2.3   org.apache.commons commons-collections4 4.0   org.apache.commons commons-lang3 3.0   org.apache.commons commons-compress ${commons-compress-version}   commons-beanutils commons-beanutils 1.9.1-SNAPSHOT    1.15  

Terakhir, mari kita juga mengecualikan artefak dari proses saat mendefinisikan plugin:

   org.codehaus.mojo versions-maven-plugin 2.7   org.apache.commons:commons-collections4      

4. Menampilkan Pembaruan yang Tersedia

Pertama-tama, untuk sekadar mengetahui apakah dan bagaimana kita dapat memperbarui proyek kita, alat yang tepat untuk pekerjaan itu adalah versi: display-dependency-updates :

mvn versions:display-dependency-updates

Seperti yang bisa kita lihat, proses tersebut mencakup setiap versi RELEASE. Ia bahkan menyertakan commons-collections4 karena pengecualian dalam konfigurasi merujuk pada proses pembaruan, dan bukan pada proses penemuan.

Sebaliknya, SNAPSHOT mengabaikannya, karena ini adalah versi pengembangan yang seringkali tidak aman untuk diperbarui secara otomatis.

5. Memperbarui Dependensi

Saat menjalankan pembaruan untuk pertama kali, plugin membuat cadangan pom.xml bernama pom.xml.versionsBackup .

Meskipun setiap iterasi akan mengubah pom.xml , file cadangan akan mempertahankan status asli proyek hingga saat pengguna akan melakukan (melalui versi mvn: komit ) atau mengembalikan (melalui versi mvn: mengembalikan ) seluruh proses.

5.1. Mengubah SNAPSHOTs menjadi RELEASEs

Terkadang proyek menyertakan SNAPSHOT (versi yang masih dalam pengembangan berat).

Kita dapat menggunakan versi: use-release untuk memeriksa apakah koresponden RELEASE telah diterbitkan, dan bahkan lebih untuk mengubah SNAPSHOT kita menjadi RELEASE pada saat yang sama:

mvn versions:use-releases 

5.2. Memperbarui ke RELEASE Berikutnya

Kami dapat mem-port setiap ketergantungan non-SNAPSHOT ke versi terdekatnya dengan versi: gunakan-rilis-berikutnya :

mvn versions:use-next-releases 

Kita dapat melihat dengan jelas bahwa plugin telah memperbarui commons-io , commons-lang3 , dan bahkan commons-beanutils , yang bukan SNAPSHOT lagi, ke versi berikutnya.

Yang terpenting, ini mengabaikan c ommons-collections4 , yang dikecualikan dalam konfigurasi plugin, dan commons-compress , yang memiliki nomor versi yang ditentukan secara dinamis melalui properti.

5.3. Memperbarui ke RELEASE Terbaru

Memperbarui setiap dependensi non-SNAPSHOT ke rilis terbarunya bekerja dengan cara yang sama, cukup mengubah tujuan ke versi: gunakan rilis terbaru :

mvn versions:use-latest-releases 

6. Filtering out Unwanted Versions

In case we want to ignore certain versions, the plugin configuration can be tuned to dynamically load rules from an external file:

 org.codehaus.mojo versions-maven-plugin 2.7  //www.mycompany.com/maven-version-rules.xml   

Most noteworthy, can also refer to a local file:

file:///home/andrea/maven-version-rules.xml 

6.1. Ignoring Versions Globally

We can configure our rules file so that it'll ignore versions matching a specific Regular Expression:

  .*-beta   

6.2. Ignoring Versions on a Per-Rule Basis

Finally, in case our needs are more specific, we can build a set of rules instead:

    .*-RELEASE 2.1.0     

7. Conclusion

We've seen how to check and update the dependencies of a project in a safe, automatic, and Maven3-compliant way.

As always, the source code is available over on GitHub, along with a script to help showcase everything step-by-step and without complexity.

Untuk melihatnya beraksi, cukup unduh proyek dan jalankan di terminal (atau di Git Bash jika menggunakan Windows):

./run-the-demo.sh