Было бы здорово, если сообщество гуру 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
.
Я не могу согласиться с вами. У нас есть плоская модульная структура: это единственный способ сделать их разделенными и независимыми в Хадсоне (иначе проверка провала в подмодуле не завершит сборку всего проекта). Некоторые из модулей (например, родительский POM) редко меняются: нет необходимости их выпускать. Другие (например, «модель») будут выпущены несколько раз. И ваш совет не работает, если у меня есть зависимости между двумя мультимодульными проектами. Даже для многомодульной сборки у меня нет доказательств того, что 'release: подготовить' заменит зависимостей' -SNAPSHOT' с версиями «будущего выпуска». –
Для первого я могу сказать, что это хорошо, если тесты не сработают, вся сборка не сработает, потому что что-то не так. Вопрос в том, почему вы любите разлучать их в Хадзоне? Либо это многомодульная сборка, либо нет. Кроме того, если родительский pom изменяется редко, поэтому кажется, что это может быть отдельный модуль, у которого есть собственный цикл выпуска, и вам нужно его освободить, потому что он используется в качестве зависимости/родителя от других. Если у вас есть зависимости между модулями, что будет работать в многомодульной сборке. Я могу порекомендовать посмотреть здесь: https://github.com/khmarbaise/javaee. – khmarbaise
_Для первого я могу сказать, что это хорошо, если тесты не сработают, вся сборка не сработает, потому что что-то не так. Это не всегда удобно. В нашем проекте небольшие группы разработчиков работают над собственным модулем. Каждый модуль имеет свой собственный список уведомлений по электронной почте, чтобы отправлять электронные письма, когда сборка сбоев/восстановление после сбоя. Таким образом, лица 'X' и' Y' отвечают за модули 'A' и' B'. –