Aktualizacja numerów wersji modułów w wielomodułowym projekcie Maven

Mam wielomodułowy projekt Mavena. Zamierzamy wersję wszystkich tych modułów razem. Ale na razie kończę na wersji hard-coding 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>

I główny moduł rodzica 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>
 229
Author: messivanio, 2011-04-20

7 answers

Użycie versions:set z wersji - maven plugin:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT

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

mvn versions:revert

Potem, lub

mvn versions:commit
Jeśli jesteś zadowolony z wyników.

Uwaga: To rozwiązanie zakłada, że wszystkie moduły używają zagregowanego pom jako nadrzędnego pom również, scenariusz, który był uważany za Standardowy w momencie udzielania tej odpowiedzi. Jeśli tak nie jest sprawa, Wybierzodpowiedź Garreta Wilsona .

 446
Author: Sean Patrick Floyd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-13 00:24:28

Możesz zajrzeć do Maven release plugin release:update-versions cel. Zaktualizuje wersję rodzica, jak również wszystkie moduły pod nim.


Aktualizacja: należy pamiętać, że powyżej jest plugin wydania. Jeśli nie zwalniasz, możesz użyć versions:set

mvn versions:set -DnewVersion=1.2.3-SNAPSHOT
 20
Author: Nishant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-26 07:32:30

Podana odpowiedź zakłada, że dany projekt wykorzystuje dziedziczenie projektu oprócz agregacji modułów. 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 agregowanymi modułami. (Nie może być w ogóle relacji rodzic-dziecko, lub Moduły potomne mogą używać oddzielnego POM jako "rodzica".) W takich sytuacjach dana odpowiedź nie zadziała.

Po wielu czytaniach i eksperymentach okazuje się, że istnieje sposób na użycie wersji Maven plugin do aktualizacji nie tylko agregatora POM, ale także wszystkich zagregowanych modułów; jest to opcja processAllModules. W katalogu projektu agregatora należy wykonać następujące polecenie:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules

Wersje wtyczki Maven nie tylko zaktualizują wersje wszystkich zawartych modułów, będzie również aktualizować zależności między modułami!!!! Jest to ogromna wygrana i pozwoli zaoszczędzić dużo czasu i zapobiec różnego rodzaju problemom.

Oczywiście nie zapomnij zatwierdzić zmian we wszystkich modułach, które możesz również zrobić za pomocą tego samego przełącznika:

mvn versions:commit -DprocessAllModules

Możesz zrezygnować z kopii zapasowych POMS całkowicie i zrobić wszystko za pomocą jednego polecenia:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false
 13
Author: Garret Wilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-13 00:11:03

Zachęcam do przeczytania Książki Mavena o Budach wielomodułowych (reaktor).

Miałem na myśli w szczególności:

<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>

Należy zmienić na. Tutaj należy zadbać o nie zdefiniowaną wersję tylko w części nadrzędnej, która jest zdefiniowana.

<modelVersion>4.0.0</modelVersion>

<parent>
    <artifactId>xyz-application</artifactId>
    <groupId>com.xyz</groupId>
    <version>2.50.0.g</version>
</parent>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>

To jest lepszym ogniwem .

 11
Author: khmarbaise,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-03 16:06:42

versions: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 potomnych moim zdaniem powinieneś usunąć definicje <version>, ponieważ będą one dziedziczyć numer wersji modułu nadrzędnego.

 4
Author: Jon Onstott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-25 13:57:00

Jeśli chcesz w pełni zautomatyzować proces (tzn. chcesz zwiększyć numer wersji bez konieczności znajomości bieżącego numeru wersji), możesz to zrobić:

mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion} versions:commit
 2
Author: Crummy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-19 08:54:31

Najlepszym sposobem jest, ponieważ zamierzasz połączyć swoje moduły razem, możesz określić tag <dependencyManagement> W outer most pom.xml (moduł nadrzędny) bezpośrednio pod tagiem <project>. Kontroluje wersję i nazwę grupy. W Twoim indywidualnym module wystarczy podać znacznik <artifactId> w twoim pom.xml. Pobiera wersję z pliku nadrzędnego.

 1
Author: murali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-27 07:17:20