Обновление номеров версий модулей в многомодульном проекте Maven - PullRequest
276 голосов
/ 20 апреля 2011

У меня есть мультимодульный проект 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>

Ответы [ 7 ]

541 голосов
/ 20 апреля 2011

Использование versions:set из плагина version-maven :

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT

Он настроит все версии POM, родительские версии и версии зависимостей в многомодульном проекте.

Если вы ошиблись, наберите

mvn versions:revert

впоследствии или

mvn versions:commit

если вы довольны результатами.


Примечание: в этом решении предполагается, что все модули используют агрегатный pom в качестве родительского pom, что также считается сценарием, который во время этого ответа считался стандартным. Если это не так, перейдите на Ответ Гаррета Уилсона .

36 голосов
/ 13 марта 2018

Данный ответ предполагает, что рассматриваемый проект использует наследование проекта в дополнение к агрегации модулей.Фактически это разные понятия:

https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation

Некоторые проекты могут представлять собой совокупность модулей, но не иметь отношения родитель-потомок между POM агрегатора и агрегированными модулями.(Отношения между родителями и детьми могут вообще отсутствовать, или дочерние модули могут использовать отдельное POM в качестве «родителя».) В этих ситуациях данный ответ не будет работать.

После длительного чтения и экспериментовоказывается, что есть способ использовать плагин Maven Versions для обновления не только POM-агрегатора, но и всех агрегированных модулей;это опция processAllModules.Следующая команда должна быть выполнена в каталоге проекта агрегатора:

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

Плагин Versions Maven не только обновит версии всех содержащихся в нем модулей, но также обновит межмодульные зависимости !!!!Это огромный выигрыш, который сэкономит много времени и предотвратит всевозможные проблемы.

Конечно, не забудьте зафиксировать изменения во всех модулях, что вы также можете сделать с тем же переключателем:

mvn versions:commit -DprocessAllModules

Вы можете решить вообще отказаться от резервного копирования POMS и выполнить все в одной команде:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false
22 голосов
/ 20 апреля 2011

Возможно, вы захотите взглянуть на релиз плагина Maven: update-version goal Он обновит версию родителя, а также все модули под ним.


Обновление: обратите внимание, что выше плагин релиза. Если вы не выпускаете, вы можете использовать versions:set

mvn versions:set -DnewVersion=1.2.3-SNAPSHOT
11 голосов
/ 20 апреля 2011

Я рекомендую вам прочитать Книгу Maven о многомодульных (реакторах) сборках.

Я имел в виду, в частности, следующее:

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

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

Эта является лучшей ссылкой .

8 голосов
/ 19 апреля 2018

Если вы хотите полностью автоматизировать процесс (т.е. вы хотите увеличить номер версии без необходимости знать, какой номер текущей версии), вы можете сделать это:

mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion} versions:commit
4 голосов
/ 07 июля 2011

versions:update-child-modules звучит как то, что вы ищете. Вы можете сделать версии: установить, как уже упоминалось, но это упрощенный способ обновления родительских номеров версий. Для дочерних модулей, я считаю, что вы должны удалить определения <version>, так как они будут наследовать номер версии родительского модуля.

2 голосов
/ 20 августа 2013

Лучший способ заключается в том, что, поскольку вы намереваетесь объединить свои модули, вы можете указать тег <dependencyManagement> во внешнем большинстве pom.xml (родительский модуль) непосредственно под тегом <project>.Он контролирует версию и название группы.В вашем отдельном модуле вам просто нужно указать тег <artifactId> в вашем pom.xml.Он будет принимать версию из родительского файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...