У меня есть мультимодульный проект Maven. Мы намерены сделать все эти модули вместе. Но на данный момент я заканчиваю жестко запрограммированную версию в каждом модуле pom.xml, как показано ниже
<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>
и основной родительский модуль имеет следующую конфигурацию
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-application</artifactId>
<version>2.50.0.g</version>
<packaging>pom</packaging>
Ответы:
Используйте
versions:set
из плагина version-maven :Он настроит все версии pom, родительские версии и версии зависимостей в многомодульном проекте.
Если вы ошиблись, сделайте
потом или
если вы довольны результатами.
Примечание: в этом решении предполагается, что все модули используют агрегатный pom в качестве родительского pom, и этот сценарий считался стандартным во время этого ответа. Если это не так, обратитесь за ответом к Гаррету Уилсону .
источник
versions:set
можно указать-DgenerateBackupPoms=false
, так как по умолчанию этот плагин создает резервные копии оригинальных файлов POM.versions:commit
: «Удаляет начальную резервную копию POM, тем самым принимая изменения».Данный ответ предполагает, что рассматриваемый проект использует наследование проекта в дополнение к агрегации модулей. На самом деле это разные понятия:
https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation
Некоторые проекты могут представлять собой совокупность модулей, но не иметь отношения родитель-потомок между агрегатором POM и агрегированными модулями. (Отношения между родителями и детьми могут вообще отсутствовать, или дочерние модули могут использовать отдельное POM в качестве «родителя».) В этих ситуациях данный ответ не будет работать.
После долгих чтений и экспериментов выясняется, что есть способ использовать плагин Versions Maven для обновления не только POM-агрегатора, но и всех агрегированных модулей; это
processAllModules
вариант. Следующая команда должна быть выполнена в каталоге проекта агрегатора:Плагин Versions Maven не только обновит версии всех содержащихся в нем модулей, но также обновит межмодульные зависимости !!!! Это огромная победа, которая сэкономит много времени и предотвратит всевозможные проблемы.
Конечно, не забудьте зафиксировать изменения во всех модулях, что вы также можете сделать с одним и тем же переключателем:
Вы можете решить вообще отказаться от резервного копирования POMS и сделать все одной командой:
источник
versions:set
плагину-DoldVersion='*'
, на mojohaus.org/versions-maven-plugin/set-mojo.html явно указывает, что это свойство должно быть указано при обработке проекта агрегатора.-DprocessAllModules
самом деле работает? Это не работает для меня.Если вы хотите полностью автоматизировать процесс (т.е. вы хотите увеличить номер версии, не зная, какой номер текущей версии), вы можете сделать это:
источник
-DoldVersion='*'
Возможно, вы захотите взглянуть на релиз плагина Maven : цель update-version . Это обновит версию родителя, а также все модули под ним.
Обновление: обратите внимание, что выше плагин релиза. Если вы не выпускаете, вы можете использовать
versions:set
источник
mvn release:update-versions -DautoVersionSubmodules
работал нормально для меня, даже если я не выпускаю :-)Я рекомендую вам прочитать Maven Book о многомодульных (реакторных) сборках.
Я имел в виду, в частности, следующее:
должен быть изменен на. Здесь позаботьтесь о не определенной версии, только в родительской части она определена.
Это лучшая ссылка .
источник
pom.xml
файлов, но я согласен (с @ ThorbjørnRavnAndersen), что чтение целой книги для этой информации излишне. : pversions:update-child-modules
звучит как то, что вы ищете. Вы можете сделать версии: установить, как упоминалось, но это упрощенный способ обновления номеров родительских версий. Для дочерних модулей, я считаю, что вы должны удалить<version>
определения, так как они будут наследовать номер версии родительского модуля.источник
Лучший способ заключается в том, что, поскольку вы намереваетесь связать свои модули вместе, вы можете указать
<dependencyManagement>
тег во внешнем мостеpom.xml
(родительский модуль) непосредственно под<project>
тегом. Он контролирует версию и название группы. В вашем отдельном модуле вам просто нужно указать<artifactId>
тег в вашемpom.xml
. Он возьмет версию из родительского файла.источник
Самый простой способ - изменить версию в каждом файле pom.xml на произвольную версию. затем проверьте, что управление зависимостями использует правильную версию модуля, используемого в этом модуле! Например, если вы хотите увеличить версии для проекта буксирного модуля, вы должны сделать это следующим образом:
в детском модуле:
и в родительском модуле:
источник
Чтобы обновить основной pom.xml и родительскую версию в подмодулях:
источник