Структура
Я знаю, что эта структура проекта не "путь Maven", и именно поэтому я борюсь в первую очередь. К сожалению, я не могу изменить структуру проекта.
Я стараюсь максимально упростить его:
/module-a
/module-b
/module-c
/parent <- <parent>master</parent>, <modules>module-a, module-b, module-c</modules>
/parent/aggregator-d <- <parent>parent</parent>, <modules>module-a, module-b</modules>
/parent/aggregator-t <- <parent>parent</parent>, <modules>module-a</modules>
Вариант использования
Версия всех модулей должна быть изменена на данная версия. Помимо родительского модуля, ни один модуль явно не определяет свою версию, поэтому необходимо изменить только родительскую версию. Но поскольку на родительскую версию ссылаются во всех других модулях, их необходимо соответствующим образом обновить.
Это прекрасно работает (при использовании release:update-versions -DautoVersionSubmodules
на родительском) для всех модулей, перечисленных в разделе <modules>
в родительский POM (или активированный профиль). Однако остальные модули aggregator-d
и aggregator-t
не обновляются.
Неудачные попытки
Поэтому я решил обновить остальные модули отдельно, используя mvn --non-recursive
, но пока безуспешно.
С плагином релиза мне удалось обновить только собственную версию, используя release:update-versions
, однако это не обновляет указанную родительскую версию, поэтому в результате получается версия модуля, отличная от родительской версии (явное объявление версии модуля было добавлено плагином релиза):
<parent>
[...]
<version>1.0.0-SNAPSHOT</version>
</parent>
<version>1.0.0-changed-SNAPSHOT</version> <- added by release plugin
При использовании плагина версии , versions:set
происходит сбой, поскольку версия модуля определяется его родителем, versions:update-parent
не работает, потому что я не может указать новую родительскую версию (вместо этого будет установлена самая новая версия, найденная в удаленном репозитории), и versions:update-child-modules
говорит мне, что все дочерние модули обновлены (потому что идея состоит в том, чтобы запустить его на агрегатор, который ссылается на модуль Я хочу обновить).
Другие идеи
Команды Maven выполняются в декларативном конвейере Jenkins, поэтому, возможно, я мог бы попробовать (не рекомендуется) writeMavenPom
.
Помимо этого и использования чего-то вроде sed
или maven-antrun-plugin
для замены регулярных выражений, у меня закончились идеи.