Gunakan Versi Terkini Ketergantungan di Maven

1. Gambaran keseluruhan

Meningkatkan kebergantungan Maven secara manual selalu menjadi kerja yang membosankan, terutamanya dalam projek dengan banyak perpustakaan yang sering dikeluarkan.

Dalam tutorial ini, kita akan belajar bagaimana memanfaatkan Versions Maven Plugin untuk memastikan pergantungan kita sentiasa terkini .

Yang terpenting, ini sangat berguna ketika melaksanakan saluran paip Integrasi Berterusan yang secara automatik meningkatkan pergantungan, menguji bahawa semuanya masih berfungsi dengan baik, dan melakukan atau mengembalikan hasilnya, mana yang sesuai.

2. Sintaks Julat Versi Maven

Kembali pada hari Maven2, pengembang dapat menentukan rentang versi di mana artifak itu akan ditingkatkan tanpa memerlukan campur tangan manual.

Sintaks ini masih berlaku, digunakan dalam beberapa projek di luar sana dan oleh itu perlu diketahui:

Walaupun begitu, kita harus menghindarinya daripada Versions Maven Plugin apabila mungkin, kerana memajukan versi konkrit dari luar memberi kita kawalan yang lebih besar daripada membiarkan Maven menangani keseluruhan operasi dengan sendirinya.

2.1. Sintaks Tidak digunakan lagi

Maven2 juga memberikan dua nilai metaversion khas untuk mencapai hasilnya: TERKINI dan SIARAN .

TERKINI mencari versi terbaru, sementara RELEASE bertujuan untuk versi terbaru bukan SNAPSHOT.

Mereka memang benar - benar berlaku untuk penyelesaian dependensi biasa .

Walau bagaimanapun, kaedah peningkatan warisan ini menyebabkan ketidaktentuan di mana CI memerlukan kebolehulangan. Oleh itu, mereka tidak lagi digunakan untuk penyelesaian pergantungan pemalam.

3. Versi Maven Plugin

Versions Maven Plugin adalah kaedah standard de facto untuk menangani pengurusan versi pada masa kini.

Dari perbandingan tahap tinggi antara repositori jauh hingga penguncian cap waktu tahap rendah untuk versi SNAPSHOT, senarai matlamatnya yang besar membolehkan kami mengurus setiap aspek projek kami yang melibatkan pergantungan.

Walaupun banyak dari mereka berada di luar ruang lingkup tutorial ini, mari kita perhatikan lebih dekat yang akan membantu kita dalam proses peningkatan.

3.1. Kes Ujian

Sebelum memulakan, mari tentukan kes ujian kami:

  • tiga SIARAN dengan versi berkod keras
  • satu SIARAN dengan versi harta tanah, 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  

Akhirnya, mari kita kecualikan artifak dari proses semasa menentukan pemalam:

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

4. Memaparkan Kemas Kini Yang Ada

Pertama sekali, untuk mengetahui sama ada dan bagaimana kita dapat mengemas kini projek kita, alat yang tepat untuk pekerjaan itu adalah versi: paparan-ketergantungan-kemas kini :

mvn versions:display-dependency-updates

Seperti yang dapat kita lihat, prosesnya merangkumi setiap versi RELEASE. Bahkan termasuk koleksi-commons4 kerana pengecualian dalam konfigurasi merujuk pada proses kemas kini, dan bukan pada penemuan.

Sebaliknya, ia mengabaikan SNAPSHOT, kerana ia adalah versi pengembangan yang selalunya tidak selamat untuk dikemas kini secara automatik.

5. Mengemas kini Pergantungan

Semasa menjalankan kemas kini untuk pertama kalinya, plugin membuat sandaran pom.xml bernama pom.xml.versionsBackup .

Walaupun setiap lelaran akan mengubah pom.xml , fail sandaran akan mengekalkan keadaan asal projek sehingga pengguna akan melakukan (melalui versi mvn: komit ) atau mengembalikan (melalui versi mvn: mengembalikan ) keseluruhan proses.

5.1. Menukar SNAPSHOT menjadi SIARAN

Kadang-kadang projek merangkumi SNAPSHOT (versi yang masih dalam pembangunan).

Kami dapat menggunakan versi: use-releases untuk memeriksa apakah RELEASE koresponden telah diterbitkan, dan lebih-lebih lagi untuk menukar SNAPSHOT kami menjadi RELEASE itu pada masa yang sama:

mvn versions:use-releases 

5.2. Mengemas kini ke SIARAN Seterusnya

Kami dapat memindahkan setiap kebergantungan bukan SNAPSHOT ke versi terdekat dengan versi: use-next-release :

mvn versions:use-next-releases 

Kita dapat melihat dengan jelas bahawa plugin itu mengemas kini commons-io , commons-lang3 , dan bahkan commons-beanutils , yang bukan lagi SNAPSHOT, ke versi seterusnya.

Yang paling penting, ia mengabaikan c ommons-koleksi4 , yang dikecualikan dalam konfigurasi plugin, dan commons-compress , yang mempunyai nombor versi yang ditentukan secara dinamik melalui properti.

5.3. Mengemas kini ke SIARAN terkini

Mengemas kini setiap kebergantungan bukan SNAPSHOT ke rilis terbarunya berfungsi dengan cara yang sama, hanya mengubah matlamat ke versi: gunakan-terbitan 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 dalam tindakan, cukup muat turun projek dan jalankan di terminal (atau di Git Bash jika menggunakan Windows):

./run-the-demo.sh