Saya memiliki proyek pakar multi-modul. Kami bermaksud untuk versi semua modul ini bersama-sama. Tetapi sampai sekarang saya berakhir versi hard-coding di masing-masing modul pom.xml seperti di bawah ini
<parent>
<artifactId>xyz-application</artifactId>
<groupId>com.xyz</groupId>
<version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>
dan modul induk utama memiliki konfigurasi di bawah ini
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-application</artifactId>
<version>2.50.0.g</version>
<packaging>pom</packaging>
Jawaban:
Gunakan
versions:set
dari plugin versi-maven :Ini akan menyesuaikan semua versi pom, versi induk dan versi dependensi dalam proyek multi-modul.
Jika Anda melakukan kesalahan, lakukan
setelah itu, atau
jika Anda senang dengan hasilnya.
Catatan: solusi ini mengasumsikan bahwa semua modul menggunakan pom agregat sebagai pom induk juga, sebuah skenario yang dianggap standar pada saat jawaban ini. Jika bukan itu masalahnya, pilihlah jawaban Garret Wilson .
sumber
versions:set
dapat ditentukan-DgenerateBackupPoms=false
, karena secara default plugin ini mencadangkan file pom asli.versions:commit
: "Menghapus cadangan awal pom, dengan demikian menerima perubahan."Jawaban yang diberikan mengasumsikan bahwa proyek tersebut menggunakan pewarisan proyek sebagai tambahan dari agregasi modul. Sebenarnya itu adalah konsep yang berbeda:
https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation
Beberapa proyek mungkin merupakan agregasi modul, namun tidak memiliki hubungan orangtua-anak antara POM agregator dan modul agregat. (Mungkin tidak ada hubungan orangtua-anak sama sekali, atau modul anak dapat menggunakan POM terpisah sama sekali sebagai "orangtua".) Dalam situasi ini jawaban yang diberikan tidak akan berfungsi.
Setelah banyak membaca dan bereksperimen, ternyata ada cara untuk menggunakan Plugin Versi Maven untuk memperbarui tidak hanya POM agregator tetapi juga semua modul teragregasi juga; itu adalah
processAllModules
pilihan. Perintah berikut harus dilakukan dalam direktori proyek agregator:Plugin Maven Versi tidak hanya akan memperbarui versi semua modul yang ada, tetapi juga akan memperbarui dependensi antar-modul !!!! Ini adalah kemenangan besar dan akan menghemat banyak waktu dan mencegah segala macam masalah.
Tentu saja jangan lupa untuk melakukan perubahan pada semua modul, yang juga dapat Anda lakukan dengan sakelar yang sama:
Anda dapat memutuskan untuk membuang POM cadangan sekaligus dan melakukan semuanya dalam satu perintah:
sumber
versions:set
plugin adalah-DoldVersion='*'
, di mojohaus.org/versions-maven-plugin/set-mojo.html secara eksplisit mengatakan properti ini harus ditentukan saat memproses proyek agregator.-DprocessAllModules
sebenarnya berfungsi? Itu tidak bekerja untuk saya.Jika Anda ingin mengotomatiskan proses sepenuhnya (yaitu Anda ingin menambah nomor versi tanpa harus tahu apa nomor versi saat ini), Anda dapat melakukan ini:
sumber
-DoldVersion='*'
Anda mungkin ingin melihat rilis rilis plugin Maven : goal versi pembaruan . Ini akan memperbarui versi induk serta semua modul di bawahnya.
Pembaruan: Harap perhatikan bahwa di atas adalah plugin rilis. Jika Anda tidak merilis, Anda mungkin ingin menggunakannya
versions:set
sumber
mvn release:update-versions -DautoVersionSubmodules
bekerja dengan baik untuk saya, bahkan jika saya tidak merilis :-)Saya mendorong Anda untuk membaca Buku Maven tentang pembuatan multi-modul (reaktor).
Secara khusus saya maksudkan yang berikut ini:
harus diubah menjadi. Di sini berhati-hatilah dengan versi yang tidak didefinisikan hanya di bagian induk yang didefinisikan.
Ini tautan yang lebih baik .
sumber
pom.xml
file, tapi saya setuju (dengan @ ThorbjørnRavnAndersen) bahwa membaca seluruh buku untuk informasi ini terlalu banyak. : pversions:update-child-modules
Kedengarannya seperti apa yang Anda cari. Anda dapat melakukan versi: ditetapkan seperti yang disebutkan, tetapi ini adalah cara yang ringan untuk memperbarui nomor versi induk. Untuk modul anak, saya berpendapat Anda harus menghapus<version>
definisi, karena mereka akan mewarisi nomor versi modul induk.sumber
Cara terbaik adalah, karena Anda berniat untuk menggabungkan modul-modul Anda bersama-sama, Anda dapat menentukan
<dependencyManagement>
tag di bagian paling luarpom.xml
(modul induk) langsung di bawah<project>
tag. Ini mengontrol versi dan nama grup. Dalam modul individual Anda, Anda hanya perlu menentukan<artifactId>
tag dipom.xml
. Ini akan mengambil versi dari file induk.sumber
cara termudah adalah mengubah versi di setiap pom.xml ke versi sewenang-wenang. kemudian periksa manajemen ketergantungan untuk menggunakan versi modul yang benar yang digunakan dalam modul ini! misalnya, jika Anda ingin meningkatkan versi untuk proyek modul derek, Anda harus melakukan seperti mengalir:
dalam modul childe:
dan dalam modul induk:
sumber
Untuk memperbarui pom.xml utama dan versi induk pada submodul:
sumber