Maven и управление релизами
Про релизы и SNAPSHOT-ы
Maven позволяет управлять циклом разработки и сборки проекта. С помощью maven эти процессы стандартизируются для всех проектов.
SPANSHOT - это специальная версия проекта или модуля. Означает, что на данный момент в модуле находится самый новый код и ведутся постоянные изменения, например делается багфиксинг или доработка нового функционала. Если в проекте используется артефакт с обычной версией (например 2.0), то maven выполнит его сборку (либо загрузку с nexus) один раз и сохранит в локальном репозитории, потом будет загружать собранный (загруженный) в первый раз артефакт. Если модуль является SPAPSHOT-ом (версия 2.0-SNAPSHOT), то maven будет пересобирать его каждый раз заново вместо того, чтобы подтягивать из репозитория, либо каждый раз вытягивать из nexus вместо вытягивания из локального репозитория. Указывать версию как SNAPSHOT нужно, если на проекте ведутся работы и нам всегда нужна самая последняя версия.
Релиз - это какой-то объём функциональности, срез проекта в определённый момент времени и фиксирование этих изменений. Зачастую релизы поставляются заказчику и отдаются на тестирование. С помощью maven можно создавать релизы и управлять версиями автоматически.
см Как работают номера версий в Maven
Конфигурирование pom-файла
Все конфигурации выполняются в pom-файле родительского проекта.
Добавить путь к SCM (source control management, например SVN или GIT)
<scm>
<developerConnection>scm:svn:https://svn.myserver.com/path/to/repository</developerConnection>
<url>https://svn.myserver.com/path/to/repository</url>
</scm>
Добавить пути к репозиторию, куда будут паблишиться релизы
<distributionManagement>
<repository>
<id>nexus</id>
<name>jazzteam release repository</name>
<url>http://svn.myserver.com/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<name>jazzteam snapshot repository</name>
<url>http://svn.myserver.com/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
Указать версию maven-release-plugin.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.1</version>
</plugin>
</plugins>
</build>
Maven и управление релизами
Создание релиза состоит из двух стадий:
- Подготовка релиза
- У нас есть многомодульный проект, версия на данный момент 1.0-SNAPSHOT
- Мы комитаем весь исходный код и вызываем
mvn release:prepare
- Maven переименовывает все версии на
1.0
, делает сборку проекта, запускает unit-тесты - Далее maven создаёт тег в системе контроля версий (svn, git, …), и сохраняет под этим тегом слепок нашего проекта (версия 1.0)
- Далее maven инкрементирует версии (в проекте и подпроектах)
на
1.1-SNAPSHOT
и комитает изменённые pom.xml файлы
- Создание релиза
- После подготовки релиза, в проекте появляются файлы бэкапов pom.xml и файл release.properties.
Release plugin использует эти файлы для выполнения релиза.
Вызываемmvn release:perform
- maven достаёт по тегу последний релиз (в нашем случае был 1.0),
- выполняет сборку и паблишит артефакты на репозиторий
- После этого чистятся все бэкапы pom-файлов и файл release.properties
- После подготовки релиза, в проекте появляются файлы бэкапов pom.xml и файл release.properties.
Ссылки