Mam dwa projekty: Projekt nadrzędny: A, Podprojekt: B
A / pom.xml:
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>
A w B / pom.xml mam:
<parent>
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
</parent>
<groupId>com.dummy.bla.sub</groupId>
<artifactId>kid</artifactId>
Chcę, aby B odziedziczył wersję po rodzicu, więc jedynym miejscem w moim przypadku, które muszę podać, 0.1-SNAPSHOT
jest A/pom.xml
. Ale jeśli usunę <version>0.1-SNAPSHOT</version>
spod B/pom.xml
sekcji nadrzędnej, maven narzeka na brakującą wersję dla rodzica.
Czy jest jakiś sposób, którego mogę użyć ${project.version}
lub coś takiego, aby uniknąć stosowania 01.-SNAPSHOT
obu poms?
inheritance
maven
Shengjie
źródło
źródło
Odpowiedzi:
EDYCJA: Od wersji Maven 3.5.0 istnieje dobre rozwiązanie tego problemu za pomocą
${revision}
symbolu zastępczego. Szczegółowe informacje można znaleźć w odpowiedzi FrVaBe . W przypadku poprzednich wersji Maven zobacz moją oryginalną odpowiedź poniżej.Nie, nie ma. Zawsze musisz podać wersję rodzica. Na szczęście jest dziedziczona jako wersja modułu, co jest pożądane w większości przypadków. Co więcej, deklaracja wersji tego rodzica jest automatycznie zderzana przez wtyczkę Maven Release Plugin, więc - w rzeczywistości - nie jest problemem, że masz wersję w 2 miejscach, o ile używasz wtyczki Maven Release Plugin do wydawania lub po prostu wypuszczania wersji.
Zauważ, że w niektórych przypadkach takie zachowanie jest całkiem OK i zapewnia większą elastyczność, której możesz potrzebować. Czasami chcesz użyć części poprzedniej wersji rodzica do dziedziczenia, jednak nie jest to główny nurt.
źródło
${revision}
zastępczego. Zobacz moją odpowiedź ;-)Maven nie jest zaprojektowany do działania w ten sposób, ale istnieje obejście tego problemu (być może z efektami ubocznymi będziesz musiał spróbować). Sztuczka polega na tym, aby powiedzieć dziecku, aby znalazł swojego rodzica poprzez ścieżkę względną zamiast współrzędnych czystego mavu, a ponadto uzewnętrznić numer wersji we właściwości:
Parent pom
Dziecko pom
Użyłem tej sztuczki przez pewien czas w jednym z moich projektów, bez żadnego konkretnego problemu, z wyjątkiem faktu, że maven zapisuje wiele ostrzeżeń na początku kompilacji, co nie jest zbyt eleganckie.
EDYTOWAĆ
Wygląda na to, że maven 3.0.4 nie pozwala już na taką konfigurację.
źródło
'version' contains an expression but should be a constant.
Najprostszym sposobem na aktualizację wersji IMO:
(zrób to w folderze pom / root pom).
Twoje POM są analizowane i pojawia się pytanie, którą wersję ustawić.
źródło
mvn versions:update-child-modules
wszystkie wersje pom modułu podrzędnego zostaną pominięte.Od wersji Maven 3.5.0 możesz do tego użyć
${revision}
symbolu zastępczego. Użycie jest udokumentowane tutaj: Maven CI Friendly Versions .Krótko mówiąc, nadrzędny pom wygląda tak (cytowany z dokumentacji Apache):
a dziecko pom tak
Również trzeba użyć Spłaszcz Maven Plugin do generowania dokumentów pom z dedykowanym numerem wersji dołączonego do wdrożenia. Poradnik jest udokumentowany w powiązanej dokumentacji.
Również @khmarbaise napisał miły post blob o tej funkcji: Pliki Maven: POM Bez wersji w nim?
źródło
${revision}
w pom (w repozytorium maven), jako zależność w innym projekcie. Nie sądzę, że to zadziała.${revision}
w tagu wersji nową wersjąJak wspomniał Yanflea, istnieje sposób na obejście tego.
W Maven 3.5.0 możesz użyć następującego sposobu przeniesienia wersji z projektu nadrzędnego:
Nadrzędny plik POM.xml
Moduł POM.xml
Możesz zmienić
myversion
na dowolne, co nie jest zastrzeżoną własnością.źródło
Możesz również użyć:
zaktualizować numery wersji w POM.
źródło
Odpowiedź eFox działała dla jednego projektu, ale nie wtedy, gdy odwoływałem się do modułu z innego (plik pom.xml nadal był przechowywany w mojej
.m2
właściwości zamiast wersji).Działa jednak, jeśli połączysz go z
flatten-maven-plugin
, ponieważ generuje poms z poprawną wersją, a nie właściwością.Jedyną opcją, którą zmieniłem w definicji wtyczki
outputDirectory
, jest domyślnie pusta, ale wolę ją miećtarget
, która jest ustawiona w mojej.gitignore
konfiguracji:Konfiguracja wtyczki znajduje się w nadrzędnym pliku pom.xml
źródło
Służy
mvn -N versions:update-child-modules
do aktualizacji wersji pom dzieckahttps://www.mojohaus.org/versions-maven-plugin/examples/update-child-modules.html
źródło
Masz na myśli, że chcesz usunąć wersję z bloku nadrzędnego pom pom B, myślę, że nie możesz tego zrobić, groupId, artefactId i wersja określiły współrzędne pom nadrzędnego, co możesz pominąć, to wersja podrzędna.
źródło