Было бы здорово, если сообщество гуру Maven может помочь мне со следующей задачей.
Я хотел бы автоматизировать процесс выпуска модуля Maven в Хадсоне таким образом, чтобы процесс выпуска выполнялся в пакетном режиме (от консоли не требуется ничего, что можно было бы попросить). В настоящее время я использую общие шаги release:prepare
(с <preparationGoals>versions:update-parent clean verify</preparationGoals>
для обновления родительской версии до последней версии до фиксации) + release:perform
. Однако я хотел бы, чтобы Maven выполнил следующее:
Несколько секунд на этапе подготовки:
- Для всех зависимостей, которые соответствуют
groupId
текущего модуля и родителя, замените-SNAPSHOT
на выпущенную версию (например,versions:use-releases -Dincludes=???
).
После выпуска:
- Для всех зависимостей, которые соответствуют
groupId
текущего модуля и родителя, замените версию выпуска версией-SNAPSHOT
(например,versions:use-latest-snapshots ...
).
Пример:
<parent>
<groupId>org.mycompany.myproject</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>myproject-api</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
перед тегом модуля преобразуется в:
<parent>
<groupId>org.mycompany.myproject</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.0</version>
</parent>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>myproject-api</artifactId>
<version>1.1</version>
</dependency>
и после того, как выпуск успешно, преобразуется в:
<parent>
<groupId>org.mycompany.myproject</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.1-SNAPSHOT</version>
</parent>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>myproject-api</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>
Мне кажется, что ему нужна смесь
versions:use-releases scm:commit release:prepare release:perform versions:use-latest-snapshots scm:commit
но я не уверен, что это лучший способ сделать это. Особенно неплохо было бы иметь как можно меньше коммитов: трудность заключается в том, что reparationGoals
запускаются после проверки версии -SNAPSHOT
.
Описанный проект не является многомодульным проектом в том смысле, что родительский POM не передает его детям через <modules>
. Структура SCM следующая:
.
|
+-- myproject-parent
| +-- pom.xml
+-- myproject-api
| +-- pom.xml
+-- myproject-impl
+-- pom.xml
Зависимости:
myproject-api → myproject-parent
myproject-impl → myproject-parent
myproject-impl → myproject-api
Исходный POM проекта (myproject-parent
) будет выпущен редко и, таким образом, будет выпущен первым. Тогда myproject-api
(при необходимости), а затем myproject-impl
.