Было бы здорово, если бы сообщество гуру Maven могло помочь мне со следующей задачей.
Я бы хотел например, автоматизировать процесс выпуска модуля Maven в Hudson таким образом, чтобы процесс выпуска выполнялся в пакетном режиме (не нужно ничего запрашивать с консоли).В настоящее время я использую общие шаги выпуск: подготовка
(с
для обновления родителя до последней версии перед фиксацией) + выпуск :выполнить
. Однако я хотел бы, чтобы Maven сделал следующее:
Когда-нибудь на этапе подготовки:
groupId
текущего модуля и parent, замените -SNAPSHOT
с выпущенной версией (например, version:use-releases -Dincludes=???
).Через некоторое время после выпуска:
groupId
текущего модуля и parent, замените версию выпуска на версию -SNAPSHOT
( например, версии: использовать последние снимки...
).Пример:
<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>
Я чувствую, что требуется смесь
версий: use-releases scm: commit выпуск: подготовить выпуск: выполнить версии: использовать последние моментальные снимки scm: зафиксировать
, но я не уверен, что это лучший способ сделать это. Особенно было бы неплохо иметь как можно меньше коммитов: сложность в том, что reparationGoals
запускаются после проверки версии -SNAPSHOT
.
Описанный проект не является многомодульным в том смысле, что родительский POM не ссылается на свои дочерние элементы через
.Структура 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
.