Шабанк, как я уже прокомментировал, Мэйвен помогает тебе делать лучший способ делать то, что ты хочешь, унаследовав от многолетнего опыта разработчиков.
Я бы объяснил, что я буду (и что я сам на самом деле) do.
То есть вы правильно используете плагин Maven Release, а также еще один (например, груз). Вы пытаетесь сделать две разные вещи:
- Идентификация уникальноговерсия, что означает его пометку и обновление pom для новой версии
- Развертывание вашего приложения (независимо от того, в какой среде оно находится)
MavenПлагин релиза
Учтите, что ваш собственный процесс может быть намного длиннее, чем другие команды разработчиков.Я имею в виду, что существует больше шагов между модульным тестированием и производственным развертыванием в больших командах (вопросы и ответы, принятие пользователей, не регрессионные кампании).Похоже, вы делаете ярлык, связывающий тег и производственное развертывание.Если вы хотите развернуть ваше веб-приложение в различных средах (интеграция, принятие пользователя, производительность, предварительная обработка и т. Д.), Вам нужно было идентифицировать свою версию и иметь возможность собрать ее заново (точно и «повторяемая»).
То, для чего предназначен плагин maven-release-plugin.Он помогает вам проверить, что ваш исходный код чист (все файлы находятся под контролем исходного кода, без изменений), может скомпилировать и пройти все этапы тестирования.Затем он имеет дело с версией и пометкой pom, а затем хранит ее для последующего использования в корпоративном репозитории Maven.
У вас есть много конфигураций, которые нужно настроить (ditributionManagement, SCM, конфигурация релиза плагина maven).Но как только оно будет готово, выпустите версию стенда в одной простой командной строке:
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-плагин, glassfish-плагин, ... Плагины дают вам возможность делать то, что вы хотите.Затем настройку можно выполнить разными способами.
Полностью Maven-способ: Полностью интегрированный способ с Maven - это использование Profile и, возможно, Filters.Профили позволяют описать свойства и поведение, как вы, кажется, знаете.Фильтры - это своего рода .properties, которые группируют набор переменных, которые будут использоваться для замены шаблонов в вашем XML-файле конфигурации на war (например, db connection).Это не тот, который я использую, потому что я считаю его менее гибким, чем внешние файлы.Но независимо от того,
Maven с его экосистемой: Я предпочитаю создавать приложения с помощью Maven и Jenkins (или инструмента непрерывной интеграции).Вот почему я согласен с Аароном, когда он говорит, что вам нужно знать ограничения ваших инструментов.Используя Jenkins, я каждый час / день запускаю свое приложение на основе модульных тестов, генерации отчетов по вопросам и ответам, документации, ... У меня есть сборка релиза, которая помогает мне производить все, что я хочу доставить (моей группе тестирования или моему клиенту),и я предоставляю некоторую информацию своим работам, чтобы развернуть ее в различных средах (используя профили maven или встроенную конфигурацию jenkins).
Это работает очень хорошо для меня, и я уверен, что это правильный путьделать.
[РЕДАКТИРОВАТЬ]
Развертывание
Еще раз, развертывание означает различные фазы жизненного цикла.
Локальная среда / среда разработки
Я бы никогда не использовал tomcat: deploy до сих пор, но только потому, что предпочел бы использовать jetty в качестве легкого веб-контейнера (и хорошо интегрированныйс мавеном).Но я уверен, что каждый тип конфигурации будет соответствовать вашим потребностям.
Среда непрерывной интеграции В среде непрерывной интеграции я обычно копирую войну непосредственно с Дженкинсом (экспорт *).война на желаемой машине).То, как я это делаю, зависит от многих вещей:
- , если CI soft находится на том же (физическом | виртуальном) сервере, что и сервер приложений (Tomcat, Jboss, Weblogic, Glassfish, ...) или удаленный один => время копирования превысит время обновления сервера и приведет к небезопасномуразвертывание (обычно поврежденные архивы)
- , если сервер поддерживает горячую перезагрузку (развернутая война в веб-приложениях для Tomcat) или хотя бы знает о модификациях файловой системы (полная война в / deploy для JBoss)
- если вам нужно остановить свой сервер раньше, ...
В большинстве случаев это простая копия.Если я не могу, я использую некоторые встроенные плагины Maven (например, плагин jahia: deploy для знаменитой CMS: www.jahia.com) или просто плагин Cargo: http://cargo.codehaus.org/Maven2+plugin. У меня нет примера, нонайти его действительно легко в Интернете, потому что эта конфигурация часто рекомендуется.
Вопросы и ответы / Приемка / Производственная среда
Для таких сред, которые часто (доЯ, как я видел в своей работе), занимается Соглашением об уровне обслуживания, мы (я или администратор) написали несколько конкретных сценариев.Я уверен, что вы будете разочарованы, но, как я уже упоминал, я не полагаюсь на Maven во всем, и в частности на развертывание.ИМХО, это один предел этого инструмента.Вы можете полагаться на грузовой плагин, или на конкретные, но выпуск версии или ее сборка не соответствуют (по временной последовательности) реальному развертыванию.Более того, я не нашел ни одного плагина, который позволял бы мне легко развертываться на нескольких экземплярах ... и даже того, что вам приходилось закрывать экземпляры в определенном порядке (потребности SLA).Тем не менее, я не упомянул внешние свойства, сценарии SQL или что-то еще.Это дополнительные причины полагаться на специальный инструмент.
Итак, в общем, мы написали наши собственные скрипты ant / sell.Если у кого-то есть более лучшие решения, я, очевидно, заинтересован в этом!
Надеюсь, я был достаточно ясен.
С уважением.