Shabunk, как я был прокомментирован, Maven заставляет вас наилучшим образом сделать то, что вы хотите, унаследовав от опыта опыта разработчиков.
Я бы объяснил, что бы я сделал (и что я на самом деле).
Так вы право использовать Maven релиз плагина, плюс еще один (груз, например) Вы пытаетесь сделать две вещи: Differents
- Идентификация уникальную версию, что означает пометка его, и обновление POM для новой версии
- Развертывание приложения (независимо от того, который ENVIRONNEMENT это)
Maven Release Plugin
Рассмотрите, что ваш собственный процесс, возможно, более длинный, чем другие команды разработчиков. Я имею в виду, что между единичным тестированием и производственным развертыванием существует больше шагов в более крупных командах (Q & A, пользовательский прием, не регрессионные лагеря). Кажется, что вы создаете ярлык, связывающий тег и развертывание производства. Если вы хотите развернуть свой webapp в разных средах (интеграция, пользовательская согласованность, производительность, препрод и т. Д.), Вам пришлось идентифицировать вашу версию и иметь возможность ее снова создать (обязательно и «повторяемо»).
Для этого предназначен плагин maven-release-plug-in. Это поможет вам убедиться, что ваш исходный код чист (все файлы, находящиеся под контролем источника, без изменений), могут собирать и передавать все этапы тестирования. Затем он имеет дело с версией 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
Еще раз, вы можете иметь несколько environnements, на котором вы хотите, чтобы проверить ваше приложение против. Существует много плагинов, которые позволяют отправлять и разворачивать вашу войну: общий плагин-плагин или более конкретные модули tomcat-плагин, плагин-плагин, ... Плагины дают вам возможность делать то, что вы хотите. Затем конфигурация может быть выполнена разными способами.
Полный путь Maven: Полный интегрированный способ с Maven заключается в использовании профиля и, возможно, фильтров. Профили позволяют описывать свойства и поведение, как вы, кажется, знаете. Фильтры являются своеобразными .properties, группирующими набор переменных, которые будут использоваться для замены шаблонов в вашем файле конфигурации xml на войне (например, соединение db). Это не тот, который я использую, потому что я нахожу его менее гибким, чем внешние файлы. Но независимо от того,
Maven с экосистемой: Так я предпочитаю строить свои приложения с Maven и Дженкинс (или инструмент Continous Integration). Вот почему я согласен с Аароном, когда он говорит, что вам нужно ограничить свои инструменты. Используя Jenkins, я запускаю каждый час/день свое приложение против Unit Tests, generatio Q & Отчеты, документация, ... У меня есть сборка релизов, которая помогает мне создавать все, что я хочу доставить (моей тестовой команде или моему клиенту), и я предоставляю некоторую информацию для своих работ, чтобы развернуть ее на разных средах (используя профили maven или встроенную конфигурацию jenkins).
Это работает отлично для меня, и я уверен, что это правильный путь.
[EDIT]
Развертывание
Еще раз, развертывание означают различные фазы жизненного цикла.
Local/Dev не ENVIRONNEMENT
Я никогда не использую Tomcat: развертывание до сих пор, но только потому, что я предпочитаю использовать причал как свет веб-контейнер (и хорошо интегрирован с Maven). Но я уверен, что каждая конфигурация конфигурации будет соответствовать вашим потребностям.
непрерывной интеграции Environnement В непрерывной интеграции Environnement, я обычно копирую войну непосредственно Дженкинс (экспорт * .war на нужной машине). Я так делать, зависит от многих вещей:
- если CI мягкий находится на том же (физическом | виртуальном) сервере, чем сервера приложений (Tomcat, JBoss, WebLogic GlassFish, ...), или удаленное одно => время копирования выйдет из состояния обновления сервера и создаст небезопасное развертывание (обычно поврежденные архивы)
- если сервер поддерживает горячую перезагрузку (взорванную войну в веб-приложениях для Tomcat) или, по крайней мере, знает файловую систему модификации (полная война в/развернуть для JBoss)
- , если вам необходимо остановить сервер перед ...
Большинство времени, это просто копия. Если я не могу, я использую некоторые интегрированные плагины maven (например, jahia: развернуть плагин для знаменитой CMS: www.jahia.com) или просто плагин для загрузки: http://cargo.codehaus.org/Maven2+plugin. У меня нет никакого примера, но очень легко найти некоторых в Интернете, потому что эта конфигурация часто рекомендуется.
Q & A/Прием/Производство Environnement
Для тех видов environnements, которые часто (насколько я, как я видел в своей работе) имеет дело с Соглашением об уровне обслуживания, мы (я или администратор команды) написал некоторые конкретные сценарии. Я уверен, что вы будете обескуражены, но, как я упоминал, я не полагаюсь на Maven для всего и для развертывания в частности. ИМХО, это один предел этого инструмента. Возможно, вы можете полагаться на грузовой плагин или на конкретные, но выпускать версию или строить ее не соответствуют (по времени) при реальном развертывании. Более того, я не нашел плагина, который позволил мне легко развернуть на нескольких экземплярах ... и даже стоило вам отключить экземпляры в определенном порядке (потребности SLA). Тем не менее, я не упоминал внешние свойства, SQL-скрипты или что-то еще. Это дополнительные причины полагаться на выделенный инструмент.
Итак, как правило, мы написали собственные скрипты ant/sell. Если у кого-то еще есть лучшие решения, я, очевидно, поселился!
Надеюсь, я был достаточно ясен.
С уважением.
Каким образом профиль поддерживает вас с пометкой в репозитории git и приращением версии сборки? Maven - это инструмент, подобный молотку - он не подходит для каждой задачи. –
Вы ошиблись в своих основных помещениях. –
Я полностью согласен с тобой, Аарон. Maven - один из лучших инструментов, которые я знаю для управления жизненным циклом разработки на основе лучших практик. Если вы не используете его, это, вероятно, потому, что вы не на правильном пути (относительно лучших оценок). Поэтому вы должны делегировать другой инструмент, обычно Ant, Jenkis или что-то еще. Это сложно, часто невозможно в наследии проекта, но это правильный способ сделать это ... +1! –