вторник, 10 августа 2010 г.

Maven Release plugin

Незаменимый и в то же время простой плагин для maven - maven-release-plugin. Помогает автоматизировать процесс создания релизов и убрать рутинный элемент.


Что мы обычно делаем в ручную чтобы создать релиз?
  1. Изменяем версию в pom.xml - убираем -SNAPSHOT.
  2. Убираем зависимости от SNAPSHOT версий. Для этого, в случае одновременной разработки, ручками релизим зависимости или же выставляем существующие релизы зависимостей.
  3. Выполняем mvn install для инсталляции в локальный репозиторий.
  4. Выполняем mvn deploy - для инсталляции в глобальный репозиторий (в snapshot или в release репозиторий - зависит от п.1).
  5. Создаем в svn (или другой scm) ветку /tags/<xxx>-<номер версии из maven>-<публичность версии> и делаем commit изменений.
  6. Меняем версию в pom.xml на <ver+1>-SNAPSHOT.

Задача, как видно, не сложная, но с увеличением количества зависимостей (п.2) превращается в адскую рутинную работу, так как нужно рекурсивно обойти все зависимости и зарелизить их. Её то и берет на себя замечательный плагин maven-release-plugin.

Стандартный процесс работы с плагином разбит на 2 части.
  1. Подготовка релиза - mvn release:prepare. На этом этапе плагин создает служебные файлы и вносит изменения в ветку tags SVN. А подробнее:


    mvn release:prepare
    
    1. Проверяет, что нет незакомиченых изменения в trunk.
    2. Проверяет, что нет зависимостей от SNAPSHOT версий.
    3. Меняет версию проекта с X-SNAPSHOT на X (полуавтоматически, с возможностью выбора).
    4. Запускает тестирование проекта.
    5. Делает commit в trunk с новой версией pom.xml.
    6. Делает tag c нужной версией (полуавтоматически, с возможностью выбора).
    7. Меняет текущую версию pom.xml проекта на новую Y-SNAPSHOT.
    8. Делает commit в trunk..
  2. Выполнение релиза - mvn release:perform. На этом этапе происходит deploy проекта в maven-репозиторий.


    mvn release:perform
    
    1. Проект забирается из SVN tags.
    2. Запускается maven-goal (по умолчанию - deploy в глобальный репозиторий).
Между этими двумя этапами может быть произведена отмена релиза - mvn release:rollback.
mvn release:rollback
Почистить директорию проекта от служебной информации mvn release можно с помощью
mvn release:clean.

О настройке.
  • Очень важно установить опции игнорирования на проект в SVN на папку target и другие. Иначе придется делать mvn release:clean каждый раз перед svn commit.
mvn propset svn:ignore -F ignore.txt
Где ignore.txt:
.settings
target
*~
*.log
.classpath
.project
  • Pom.xml каждого проекта должен содержать следующие настройки.
<scm>
    <connection>scm:svn:https://svnserver/GreetingsEA/trunk</connection>
    <developerConnection>scm:svn:https://svnserver/GreetingsEA/trunk</developerConnection>
    <url>scm:svn:https://svnserver/GreetingsEA/trunk</url>
</scm>
...
<plugin>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.0</version>
    <configuration>
        <tagBase>https://svnserver/GreetingsEA/tags</tagBase>
        <scmCommentPrefix>[sandbox] release:</scmCommentPrefix>
    </configuration>
</plugin>
...
<distributionManagement>
    <repository>
        <id>x-release</id>
        <name>X release repository</name>
        <url>http://mavenserver/content/repositories/x-release/</url>
    </repository>
    <snapshotRepository>
        <id>x-snapshot</id>
        <name>X snapshot repository</name>
        <url>http://mavenserver/content/repositories/x-snapshot/</url>
    </snapshotRepository>
</distributionManagement> 

,где секция distributionManagment на практике бывает общей для всех проектов. Для ее выделения за скобки предлагается сделать пустой проект, куда будут выноситься все общие настройки проектов. Этот пустой проект следует указывать как parent для всех проектов.
  • В системе должен быть установлен консольный клиент SVN. Мне нравится SlikSvn.
Ссылки.

Комментариев нет:

Отправить комментарий