CATATAN:
Jawaban ini hanya berlaku untuk Maven 2! Disebutkan LATEST
dan RELEASE
metaversions telah dijatuhkan di Maven 3 "demi membangun direproduksi" , lebih dari 6 tahun yang lalu. Silakan merujuk solusi yang sesuai Maven 3 ini .
Jika Anda selalu ingin menggunakan versi terbaru, Maven memiliki dua kata kunci yang dapat Anda gunakan sebagai alternatif untuk rentang versi. Anda harus menggunakan opsi ini dengan hati-hati karena Anda tidak lagi mengontrol plugin / dependensi yang Anda gunakan.
Saat Anda bergantung pada plugin atau dependensi, Anda dapat menggunakan nilai versi TERBARU atau RELEASE. TERBARU mengacu pada versi artifak tertentu yang dirilis atau snapshot terbaru, artefak yang paling terakhir digunakan dalam repositori tertentu. RELEASE mengacu pada rilis non-snapshot terakhir dalam repositori. Secara umum, ini bukan praktik terbaik untuk merancang perangkat lunak yang tergantung pada versi artefak yang tidak spesifik. Jika Anda mengembangkan perangkat lunak, Anda mungkin ingin menggunakan RELEASE atau TERBARU sebagai kenyamanan sehingga Anda tidak perlu memperbarui nomor versi ketika rilis baru perpustakaan pihak ketiga dirilis. Saat Anda merilis perangkat lunak, Anda harus selalu memastikan bahwa proyek Anda bergantung pada versi spesifik untuk mengurangi peluang pembangunan Anda atau proyek Anda terpengaruh oleh rilis perangkat lunak yang tidak berada di bawah kendali Anda.
Lihat bagian Sintaks POM dari buku Maven untuk lebih jelasnya. Atau lihat dokumen ini di Ranges Versi Ketergantungan , di mana:
- Braket persegi (
[
& ]
) berarti "tertutup" (inklusif).
- Tanda kurung (
(
& )
) berarti "terbuka" (eksklusif).
Berikut ini contoh yang menggambarkan berbagai opsi. Dalam repositori Maven, com.foo:my-foo memiliki metadata berikut:
<?xml version="1.0" encoding="UTF-8"?><metadata>
<groupId>com.foo</groupId>
<artifactId>my-foo</artifactId>
<version>2.0.0</version>
<versioning>
<release>1.1.1</release>
<versions>
<version>1.0</version>
<version>1.0.1</version>
<version>1.1</version>
<version>1.1.1</version>
<version>2.0.0</version>
</versions>
<lastUpdated>20090722140000</lastUpdated>
</versioning>
</metadata>
Jika ketergantungan pada artifak itu diperlukan, Anda memiliki opsi berikut ( tentu saja rentang versi lain , hanya menunjukkan yang relevan di sini):
Nyatakan versi persisnya (akan selalu diselesaikan pada 1.0.1):
<version>[1.0.1]</version>
Nyatakan versi eksplisit (akan selalu diselesaikan pada 1.0.1 kecuali terjadi tabrakan, ketika Maven akan memilih versi yang cocok):
<version>1.0.1</version>
Nyatakan rentang versi untuk semua 1.x (saat ini akan diselesaikan ke 1.1.1):
<version>[1.0.0,2.0.0)</version>
Nyatakan rentang versi terbuka (akan beralih ke 2.0.0):
<version>[1.0.0,)</version>
Deklarasikan versi sebagai TERBARU (akan menyelesaikan ke 2.0.0) (dihapus dari maven 3.x)
<version>LATEST</version>
Deklarasikan versi sebagai RELEASE (akan menyelesaikan ke 1.1.1) (dihapus dari maven 3.x):
<version>RELEASE</version>
Perhatikan bahwa secara default penyebaran Anda sendiri akan memperbarui entri "terbaru" di metadata Maven, tetapi untuk memperbarui entri "rilis", Anda perlu mengaktifkan "profil rilis" dari MOM super POM . Anda dapat melakukan ini dengan "-Peluang-profil" atau "-DperformRelease = true"
Patut ditekankan bahwa pendekatan apa pun yang memungkinkan Maven untuk memilih versi dependensi (TERBARU, RELEASE, dan rentang versi) dapat membuat Anda terbuka untuk membuat masalah waktu, karena versi yang lebih baru dapat memiliki perilaku yang berbeda (misalnya plugin dependensi sebelumnya telah beralih ke default nilai dari benar ke salah, dengan hasil yang membingungkan).
Oleh karena itu umumnya merupakan ide yang baik untuk mendefinisikan versi yang tepat dalam rilis. Seperti yang ditunjukkan oleh jawaban Tim , plugin-versi-maven adalah alat yang berguna untuk memperbarui versi dependensi, terutama versi - versi: use-latest-versi dan versi: use-latest-rilis goal.