Skip to end of metadata
Go to start of metadata

Для релиза стабильных версий модулей и их деплоя в наш репозиторй http://repo.jtalks.org удобно использовать maven release plugin. Его использование было добавлено в корневой POM, но для корректной работы потребуется проделать несколько шагов.

Установка переменных окружения

  • Установка переменной окружения JAVA_HOME для всех пользователей. Она должна указывать на папку с JVM/JDK версии 1.6;
  • Установка переменной окружения M2_HOME для всех пользователей. Она должна указывать на каталог, в котором находится Apache Maven;
  • Добавление к значению переменной PATH для всех пользователей пути к исполняемым файлам git;
  • [Опционально] Добавление к значению переменной PATH для всех пользователей пути к исполняемым файлам Maven;
  • Установка переменной окружения HOME для всех пользователей. Она должна указывать на каталог, в котором находится папка .ssh с вашими ключами для доступа к репозитариям git. К сожалению, по какой-то причине у меня Windows отказывалась видеть переменные окружения, заданные для пользователя, поэтому я добавил HOME в системные переменные окружения.

Настройки POM проекта

В корневой POM проекта необходимо внести информацию о репозитории с исходным кодом, например так:

Если все подмодули проекта имеют одинаковые версии, то будет удобно добавить к конфигурации плагина для вашего проекта соответствующую настройку. Для этого необходимо в разделе <plugins> корневого POM указать следующее:

Добавление файлов, создаваемых плагином, в .gitignore [опционально]

Для того, чтобы временные файлы, создаваемые плагином, игнорировались Git, рекомендуется добавить их в файл .gitignore в корне проекта:

Работа с плагином

На этом с настройками покончено, обратимся к использованию плагина. У него есть несколько целей (goals), рассмотрим следующие:

  • release:clean - эта цель удаляет все созданные плагином временные файлы с информацией о релизе. Полезно использовать, если на середине выполнения плагин упал.
  • release:prepare - эта цель подготавливает релиз, выполняя следующие основные действия:
    • Запрос у пользователя версии, с которой будет осуществлен релиз, для каждого модуля, или для корневого модуля, если <autoVersionSubmodules> установлен в true;
    • Запрос у пользователя строкового значения тега, которым будет помечен коммит релиз-кода;
    • Запрос у пользователя следующей девелопмент-версии модулей;
    • Сборка и прогон тестов;
    • Изменение версий модулей на релиз-версию, создание тега и коммит в репозиторий. По умолчанию плагин предложит тег "artifactId-version", где version - новая версия кода;
    • Изменение версий модулей на следующую девелопмент-версию и коммит в репозиторий;
    • Создание временных файлов, описывающих релиз;
  • release:perform - эта цель осуществляет релиз кода в репозиторий maven модулей соответствующей версии из репозитория.  Для этого в файле ~/.m2/settings.xml должны быть указаны имя пользователя и пароль для доступа к репозиторию на запись.

Нерешенные проблемы

Следующие проблемы при работе с этим плагином мне решить не удалось:

  • Избавиться от установки системной переменной, содержащей путь к профилю пользователя;
  • Корректная настройка автоматического формирования тегов для новых версий кода - если попытаться переопределить значение по умолчанию, переменная ${project.version} будет содержать текущую, а не релиз-версию кода;
  • Для того, чтобы release:perform завершился успешно, мне потребовалось следующее:
    • Обеспечить наличие артифакта jtalks:jtalks нужной версии в локальном репозитории;
    • Скопировать файл header.txt в папку target в модуле, с которым я работал - без него maven не мог провести проверку заголовков о лицензиях;

Все вышеописанное делалось под операционной системой Windows 7 Домашняя расширенная x64, Apache Maven 3.0.3, IntelliJ Idea 10.5.1, Java 1.6.0_26, Git 1.7.5.GIT.

2 Comments

  1. Anonymous

    • _Корректная настройка автоматического формирования тегов для новых версий кода - если попытаться переопределить значение по умолчанию, переменная $
      Unknown macro: {project.version}

      будет содержатьтекущую, а не релиз-версию кода;_

      http://maven.apache.org/plugins/maven-release-plugin/prepare-mojo.html#tagNameFormat - используйте другое экранирование - @

    1. Anonymous

      • Корректная настройка автоматического формирования тегов для новых версий кода - если попытаться переопределить значение по умолчанию, переменная ${project.version} будет содержатьтекущую, а не релиз-версию кода;

      http://maven.apache.org/plugins/maven-release-plugin/prepare-mojo.html#tagNameFormat - используйте специальное экранирование: @{project.version}