Mam wielomodułowy projekt maven. Zamierzamy razem zaktualizować wszystkie te moduły. Ale na razie kończę wersję na stałe w każdym module pom.xml, jak poniżej
<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>
a główny moduł nadrzędny ma poniższą konfigurację
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-application</artifactId>
<version>2.50.0.g</version>
<packaging>pom</packaging>
Odpowiedzi:
Stosowanie
versions:set
z wersjami-Maven plugin :Dostosuje wszystkie wersje pom, wersje nadrzędne i wersje zależności w projekcie wielomodułowym.
Jeśli popełniłeś błąd, zrób to
później lub
jeśli jesteś zadowolony z wyników.
Uwaga: w tym rozwiązaniu założono, że wszystkie moduły używają również pom pom agregate, co jest scenariuszem uznanym za standardowy w momencie udzielania odpowiedzi. Jeśli tak nie jest, skorzystaj z odpowiedzi Garreta Wilsona .
źródło
versions:set
można określić-DgenerateBackupPoms=false
, ponieważ domyślnie ta wtyczka tworzy kopie zapasowe oryginalnych plików pom.versions:commit
: „Usuwa początkową kopię zapasową pom, akceptując w ten sposób zmiany”.Podana odpowiedź zakłada, że dany projekt oprócz agregacji modułów korzysta z dziedziczenia projektu. W rzeczywistości są to odrębne pojęcia:
https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation
Niektóre projekty mogą być agregacją modułów, ale nie mają relacji rodzic-dziecko między agregatorem POM a modułami agregowanymi. (Może nie być w ogóle żadnych relacji rodzic-dziecko lub moduły potomne mogą używać osobnego POM jako „rodzic”). W takich sytuacjach dana odpowiedź nie zadziała.
Po wielu lekturach i eksperymentach okazuje się, że istnieje sposób na użycie wtyczki Versions Maven do aktualizacji nie tylko POM agregatora, ale także wszystkich modułów zagregowanych; to jest
processAllModules
opcja. W katalogu projektu agregatora należy wykonać następujące polecenie:Wtyczka Versions Maven nie tylko zaktualizuje wersje wszystkich zawartych modułów, ale także zaktualizuje zależności między modułami !!!! To ogromna wygrana, która pozwoli zaoszczędzić dużo czasu i zapobiegnie różnego rodzaju problemom.
Oczywiście nie zapomnij zatwierdzić zmian we wszystkich modułach, co możesz również zrobić za pomocą tego samego przełącznika:
Możesz zrezygnować z tworzenia kopii zapasowych POMS i zrobić wszystko za pomocą jednego polecenia:
źródło
versions:set
wtyczce jest-DoldVersion='*'
, na mojohaus.org/versions-maven-plugin/set-mojo.html wyraźnie mówi, że ta właściwość powinna zostać określona podczas przetwarzania projektu agregatora.-DprocessAllModules
faktycznie działa? To nie działa dla mnie.Jeśli chcesz w pełni zautomatyzować proces (tzn. Chcesz zwiększyć numer wersji bez konieczności poznania aktualnego numeru wersji), możesz to zrobić:
źródło
-DoldVersion='*'
Być może warto przyjrzeć się wydaniu wtyczki Maven : aktualizacja wersji . Zaktualizuje wersję nadrzędną, a także wszystkie moduły pod nią.
Aktualizacja: Należy pamiętać, że powyższa wersja jest wtyczką wydania. Jeśli nie zwalniasz, możesz użyć
versions:set
źródło
mvn release:update-versions -DautoVersionSubmodules
działało dla mnie dobrze, nawet jeśli nie wypuszczam :-)Zachęcam do przeczytania Księgi Maven o kompilacjach wielomodułowych (reaktorów).
Miałem na myśli w szczególności:
należy zmienić na. Tutaj dbaj o niezdefiniowaną wersję tylko w części nadrzędnej, w której jest zdefiniowana.
To jest lepszy link .
źródło
pom.xml
plików, ale zgadzam się (z @ ThorbjørnRavnAndersen), że czytanie całej książki z tymi informacjami jest przesadą. : pversions:update-child-modules
brzmi jak to, czego szukasz. Możesz zrobić wersje: ustaw jak wspomniano, ale jest to lekki sposób na aktualizację numerów wersji nadrzędnych. W przypadku modułów podrzędnych moim zdaniem należy usunąć<version>
definicje, ponieważ odziedziczą one numer wersji modułu nadrzędnego.źródło
Najlepszym sposobem jest to, że ponieważ zamierzasz połączyć swoje moduły razem, możesz określić
<dependencyManagement>
znacznik w najbardziej zewnętrznejpom.xml
(module macierzystym) bezpośrednio pod<project>
znacznikiem. Kontroluje wersję i nazwę grupy. W swoim indywidualnym module wystarczy podać<artifactId>
tag w swoimpom.xml
. Będzie pobierał wersję z pliku nadrzędnego.źródło
najprostszym sposobem jest zmiana wersji w każdym pliku pom.xml na dowolną. następnie sprawdź zarządzanie zależnościami, aby użyć poprawnej wersji modułu używanego w tym module! na przykład, jeśli chcesz zwiększyć wersjonowanie dla projektu modułu holowniczego, musisz zrobić to tak:
w module childe:
oraz w module nadrzędnym:
źródło
Aby zaktualizować główny pom.xml i wersję nadrzędną w submodułach:
źródło