Saya punya dua proyek: Proyek induk: A, Sub proyek: B
A / pom.xml:
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>
Dan di B / pom.xml, saya punya:
<parent>
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
</parent>
<groupId>com.dummy.bla.sub</groupId>
<artifactId>kid</artifactId>
Saya ingin B mewarisi versi dari orangtua, jadi satu-satunya tempat dalam kasus saya yang perlu saya taruh 0.1-SNAPSHOT
adalah A/pom.xml
. Tetapi jika saya menghapus <version>0.1-SNAPSHOT</version>
dari di B/pom.xml
bawah bagian induk, maven mengeluh tentang versi yang hilang untuk induk.
Apakah ada cara saya bisa menggunakan ${project.version}
atau sesuatu seperti ini untuk menghindari 01.-SNAPSHOT
di kedua pom?
inheritance
maven
Shengjie
sumber
sumber
Jawaban:
EDIT: Sejak Maven 3.5.0 ada solusi yang bagus untuk menggunakan
${revision}
placeholder ini. Lihat jawaban FrVaBe untuk detailnya. Untuk versi Maven sebelumnya lihat jawaban asli saya di bawah ini.Tidak, tidak ada. Anda selalu harus menentukan versi orang tua. Untungnya, itu diwarisi sebagai versi modul apa yang diinginkan dalam kebanyakan kasus. Selain itu, deklarasi versi orang tua ini dibentur secara otomatis oleh Maven Release Plugin, jadi - pada kenyataannya - bukan masalah bahwa Anda memiliki versi di 2 tempat selama Anda menggunakan Maven Release Plugin untuk merilis atau hanya menabrak versi.
Perhatikan bahwa ada beberapa kasus ketika perilaku ini sebenarnya cukup OK dan memberikan lebih banyak fleksibilitas yang mungkin Anda butuhkan. Terkadang Anda ingin menggunakan beberapa versi orang tua sebelumnya untuk mewarisi, namun itu bukan kasus umum.
sumber
${revision}
placeholder untuk ini. Lihat jawaban saya ;-)Maven tidak dirancang untuk bekerja seperti itu, tetapi ada solusi untuk mencapai tujuan ini (mungkin dengan efek samping, Anda harus mencoba). Kuncinya adalah memberi tahu proyek anak untuk menemukan induknya melalui jalur relatifnya daripada koordinat maven murninya, dan di samping mengeksternalisasi nomor versi di properti:
Pom orang tua
Anak pom
Saya menggunakan trik itu untuk sementara waktu untuk salah satu proyek saya, tanpa masalah khusus, kecuali fakta bahwa maven mencatat banyak peringatan di awal pembuatan, yang tidak terlalu elegan.
EDIT
Tampaknya pakar 3.0.4 tidak mengizinkan konfigurasi seperti itu lagi.
sumber
'version' contains an expression but should be a constant.
Cara termudah untuk memperbarui versi IMO:
(lakukan itu di folder pom root / parent Anda).
POM Anda diuraikan dan Anda diminta untuk menentukan versi mana.
sumber
mvn versions:update-child-modules
jika tidak semua versi anak pom modul akan dilewati.Karena Maven 3.5.0 Anda dapat menggunakan
${revision}
placeholder untuk itu. Penggunaannya didokumentasikan di sini: Versi Ramah Maven CI .Singkatnya, parent pom terlihat seperti ini (dikutip dari dokumentasi Apache):
dan anak pom menyukai ini
Anda juga harus menggunakan Flatten Maven Plugin untuk menghasilkan dokumen pom dengan nomor versi khusus yang disertakan untuk penerapan. HowTo didokumentasikan dalam dokumentasi tertaut.
@Khmarbaise juga menulis posting yang bagus tentang fitur ini: Maven: File POM Tanpa Versi di dalamnya?
sumber
${revision}
di pom (dalam repositori maven) sebagai ketergantungan dalam proyek lain. Saya tidak berpikir ini akan berhasil.${revision}
dalam tag versi dengan versi baruSeperti yang disebutkan Yanflea, ada cara untuk menyiasatinya.
Di Maven 3.5.0 Anda dapat menggunakan cara berikut untuk mentransfer versi dari proyek induk:
POM.xml induk
Modul POM.xml
Anda bebas mengubah
myversion
ke apa pun yang Anda inginkan yang bukan properti yang dipesan.sumber
Anda juga bisa menggunakan:
untuk memperbarui nomor versi di POM Anda.
sumber
Jawaban eFox bekerja untuk satu proyek, tetapi tidak ketika saya mereferensikan modul dari yang lain (pom.xml masih disimpan di
.m2
properti saya dengan alih-alih versi).Namun, ini berfungsi jika Anda menggabungkannya dengan
flatten-maven-plugin
, karena menghasilkan pom dengan versi yang benar, bukan properti.Satu-satunya opsi yang saya ubah dalam definisi plug-in adalah
outputDirectory
, itu kosong secara default, tapi saya lebih suka memilikinyatarget
, yang diatur dalam.gitignore
konfigurasi saya :Konfigurasi plug-in berlaku di pom.xml induk
sumber
Gunakan
mvn -N versions:update-child-modules
untuk memperbarui versi pom anakhttps://www.mojohaus.org/versions-maven-plugin/examples/update-child-modules.html
sumber
Maksud Anda, Anda ingin menghapus versi dari blok induk pom B, saya pikir Anda tidak dapat melakukannya, groupId, artifactId, dan versi yang ditentukan koordinat pom induk, yang dapat Anda hilangkan adalah versi anak.
sumber