Подтвердить что ты не робот

Полностью автоматизировать процедуру выпуска с плагинами release + версий

Было бы здорово, если сообщество гуру 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.

4b9b3361

Ответ 1

Простая проблема заключается в том, что ваш родитель имеет другой номер версии, чем ваши дочерние элементы, что является неправильным способом для сборки mulit-модуля. Многомодульная сборка предназначена для того, чтобы иметь ряд связанных модулей, которые имеют тот же процесс выпуска, из которого следует, чтобы иметь тот же номер версии. Если вы следуете этому руководству, вам не нужен плагин версий, который вы делаете только релиз через выпуск: подготовьте и отпустите: выполните это.

Update: После дальнейшего обсуждения я предложил бы установить новый набор заданий Хадсона, которые содержат зависимости между модулями (downstream/upstream deps.) И сделать выпуск на каждом задании hudson, который запускает следующий в строке заданий и так далее, Это предпосылки для того, чтобы иметь отдельные модули и отдельные области в управлении версиями. В противном случае этот бой будет потерян с Maven и осложнит жизнь.