Ответ 1
Shabunk, поскольку я был прокомментирован, Maven заставляет вас наилучшим образом делать то, что вы хотите, унаследовав от опыта опыта разработчиков.
Я бы объяснил, что я (и что я на самом деле) делаю.
Итак, вы правы, чтобы использовать Maven Release Plugin, а также еще один (например, груз) Вы пытаетесь сделать две вещи:
- Идентификация уникальной версии, что означает ее пометку и обновление pom для новой версии
- Развертывание вашего приложения (независимо от того, какая среда оно есть)
Плагин релиза Maven
Учтите, что ваш собственный процесс, возможно, более длинный, чем другие команды разработчиков. Я имею в виду, что между модульными тестированиями и производством в больших командах есть больше шагов (Q & A, прием пользователей, нерегрессивные лагеря). Кажется, что вы создаете ярлык, связывающий тег и развертывание производства. Если вы хотите развернуть свой webapp в разных средах (интеграция, пользовательская согласованность, производительность, препрод и т.д.), Вам нужно было идентифицировать вашу версию и иметь возможность ее снова создать (обязательно и "повторяемо" ).
То, для чего предназначен maven-release-плагин. Это поможет вам убедиться, что ваш исходный код чист (все файлы, находящиеся под контролем источника, без изменений), могут собирать и передавать все этапы тестирования. Затем он имеет дело с версией pom и тегами и заканчивается, сохраняя ее для последующего использования в вашем репозитории предприятий Maven.
У вас есть много настроек для настройки (настройка ditributionManagement, SCM, maven plugin). Но как только он будет установлен, выпуская версию стоит в одной простой командной строке:
mvn release:prepare release:perform
Если вам нужны некоторые примеры, я могу дать вам некоторые.
<scm>
<!-- Base URL repository -->
<url>scm:svn:http://svn.myorg.corp/svn/repository/</url>
<!-- Developper URL (from trunk or branche) -->
<developerConnection>scm:svn:http://svn.myorg.corp/svn/repository/trunk/project1</developerConnection>
<connection>scm:svn:http://svn.myorg.corp/svn/repository/trunk/project1</connection>
</scm>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.6</version>
<configuration>
<username>${from.settings.xml.user}</username>
<password>${from.settings.xml.password}</password>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<tagBase>http://svn.myorg.corp/svn/repository/tags/</tagBase>
<scmCommentPrefix>[DEV#SCM]</scmCommentPrefix>
</configuration>
</plugin>
</plugins>
[...]
</build>
<distributionManagement>
<repository>
<id>enterprise_repo</id>
<name>Enteprise Repository on Artifactory - Stable versions</name> <url>http://repo.corp:8080/artifactory/prj-xxx-releases</url>
</repository>
<snapshotRepository>
<id>enterprise_repo</id>
<name>Enteprise Repository on Artifactory - DEV versions</name>
<url>http://repo.corp:8080/artifactory/prj-xxx-snapshots</url>
</snapshotRepository>
<site>
<id>corporate_site</id>
<name>Corporate public site</name>
<!-- must add wagon plugin that support this protocol -->
<url>ftp://...</url>
</site>
</distributionManagement>
Deployement
Еще раз, у вас может быть несколько окружений, на которые вы хотите протестировать свое приложение. Существует много плагинов, которые позволяют отправлять и развертывать вашу войну: общий плагин-плагин, или более конкретные модули tomcat-плагин, плагин для плавающей... Плагины дают вам возможность делать то, что вы хотите. Затем конфигурация может быть выполнена разными способами.
Полный путь Maven: Полностью интегрированный способ с Maven заключается в использовании профиля и, возможно, фильтров. Профили позволяют описывать свойства и поведение, как вы, кажется, знаете. Фильтры являются своеобразными .properties, группирующими набор переменных, которые будут использоваться для замены шаблонов в вашем файле конфигурации xml на войне (например, соединение db). Это не тот, который я использую, потому что я нахожу его менее гибким, чем внешние файлы. Но не важно
Maven с его экосистемой: Я предпочитаю создавать свои приложения с помощью Maven и Jenkins (или инструмента непрерывной интеграции). Вот почему я согласен с Аароном, когда он говорит, что вам нужно ограничить свои инструменты. Используя Jenkins, я запускаю каждый час в день мое приложение против тестов Unit, генератор Q & A отчетов, документации,... У меня есть сборка релиза, которая помогает мне создавать все, что я хочу доставить (моей тестовой команде или моему клиенту), и я предоставляю некоторую информацию моим заданиям, чтобы развернуть ее на разных средах (используя профили maven или встроенную конфигурацию jenkins).
Он отлично работает для меня, и я уверен, что это правильный способ сделать.
[EDIT]
Развертывание
И снова развертывание означает разные фазы жизненного цикла.
Локальная/Dev-окружающая среда
Я бы никогда не использовал tomcat: развертывание до сих пор, но только потому, что я предпочел бы использовать причал как легкий веб-контейнер (и хорошо интегрированный с maven). Но я уверен, что каждая конфигурация конфигурации будет соответствовать вашим потребностям.
Непрерывная интеграция среды В непрерывной среде интеграции я обычно копирую войну непосредственно с Дженкинсом (экспортируя *.war на желаемую машину). То, как я это делаю, зависит от многих вещей:
- если CI soft находится на одном и том же (физическом | виртуальном) сервере, чем ваш сервер приложений (Tomcat, Jboss, Weblogic, Glassfish,...), или отдаленный один = > время копирования выйдет за время обновления сервера и приведет к небезопасным развертывание (обычно поврежденные архивы).
- если сервер поддерживает горячую перезагрузку (взорванную войну в веб-приложениях для Tomcat) или, по крайней мере, знает изменения файловой системы (полная война в/для JBoss)
- если вам нужно остановить сервер раньше,...
В большинстве случаев это простая копия. Если я не могу, я использую некоторые интегрированные плагины maven (например, jahia: развернуть плагин для знаменитой CMS: www.jahia.com) или просто плагин для загрузки: http://cargo.codehaus.org/Maven2+plugin. У меня нет никакого примера, но очень легко найти некоторых в Интернете, потому что эта конфигурация часто рекомендуется.
Q & A/Accept/Production environmentnement
Для тех видов окружающей среды, которые часто (насколько я видел в своей работе) имеет дело с Соглашением об уровне обслуживания, мы (я или команда администратора) писали некоторые конкретные сценарии. Я уверен, что вы будете обескуражены, но, как я упоминал, я не полагаюсь на Maven для всего и для развертывания в частности. ИМХО, это один предел этого инструмента. Возможно, вы можете полагаться на грузовой плагин или на конкретные, но выпускать версию или строить ее не соответствуют (по времени) при реальном развертывании. Более того, я не нашел плагина, который позволяет мне легко развертывать на нескольких экземплярах... и даже стоило вам отключить экземпляры в определенном порядке (потребности SLA). Тем не менее, я не упоминал внешние свойства, SQL-скрипты или что-то еще. Это дополнительные причины полагаться на выделенный инструмент.
Итак, как правило, мы написали собственные скрипты ant/sell. Если у кого-то есть лучшие решения, я, очевидно, заинтригован!
Надеюсь, я был достаточно ясным.
С уважением.