Было бы здорово, если бы сообщество гуру Maven помогло мне со следующей задачей.
Я хотел бы автоматизировать процесс выпуска модуля Maven в Hudson таким образом, чтобы процесс выпуска выполнялся в пакетном режиме (не нужно ничего запрашивать с консоли). В настоящее время я использую общие шаги 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>
. Структура СКМ следующая:
.
|
+-- 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
.