Должен ли Maven упаковывать разные WAR-файлы для разных серверов приложений?

Я только начинаю упаковывать свой проект веб-приложения в виде файла WAR и сталкиваюсь с различиями между конфигурацией Tomcat, Jetty, JBoss, Websphere и т. д.

Должен ли я попытаться настроить какой-нибудь супер-умный файл WAR «все в одном» или мне следует создать разные профили Maven для создания разных WAR для каждого сервера приложений?

Я не думаю, что мне следует создавать отдельный модуль Maven для каждой WAR сервера приложений, не так ли?


person HDave    schedule 24.09.2010    source источник
comment
Какие различия у вас есть между серверами приложений?   -  person Pascal Thivent    schedule 25.09.2010


Ответы (2)


Я стараюсь никогда не отправлять конфигурацию во время войны. Код не должен заботиться о том, в какую среду он поставляется. Это делает развертывание более сложным, но оборотная сторона заключается в том, что вы можете легко отправить изменение конфигурации и должны быть обеспокоены случайным развертыванием изменений кода в среде.

В данном случае этот совет применим вдвойне, поскольку кажется, что у вас проблемы с разными средами и разными контейнерами.

person Julian Simpson    schedule 24.09.2010
comment
Итак, как вы помогаете клиентам с установкой... отдельная программа установки, инструкции? Также я заинтересован в том, чтобы упростить развертывание для разработчиков и тестировщиков. - person HDave; 25.09.2010
comment
Используйте Cargo, чтобы упростить развертывание для разработчиков. Я считаю, что он может копировать невоенные артефакты. - person Julian Simpson; 27.09.2010
comment
В любом случае мне всегда приходилось писать отдельный сценарий развертывания. Что хорошо работало в прошлом, так это создание одного большого zip-файла с развертываемыми материалами, включая приложение, конфигурацию, дельты базы данных и т. д. Затем легко написать сценарий развертывания, поскольку вы знаете, что у вас есть все зависимости. - person Julian Simpson; 27.09.2010
comment
@Julian - Как сделать так, чтобы такие вещи, как конфигурация Spring, были внешними по отношению к файлу WAR? Или скрипт, на который вы ссылаетесь, изменяет содержимое WAR? - person HDave; 28.09.2010
comment
Извините за долгий ответ, HDave. Я всегда использовал PropertyPlaceHolderConfigurer, так что в конечном итоге вы получаете конфигурации в развертываемом, но значения считываются из файлов свойств. Вы также можете делать отличные вещи с JNDI для передачи местоположений файлов. Таким образом, ваше приложение не имеет незаконных половых связей с внешним миром, но по-прежнему пользуется преимуществами чтения файлов из-за пределов контейнера. См. forum.springsource.org/showthread.php?t=31598. - person Julian Simpson; 01.10.2010
comment
Спасибо за совет. Я собираюсь создать один WAR-файл без конфигурации сервера приложений или клиента. Для целей интеграции и тестирования разработчиков Cargo выглядит великолепно. Будет использовать JNDI для поиска и использования внешних файлов конфигурации Spring. - person HDave; 08.10.2010

Сначала я бы попытался заставить это работать с одной супер-умной войной. Я не знаю, с какими именно проблемами вы столкнулись, но jboss-web.xml и jetty-web.xml должны сосуществовать в одном WEB-INF.

Если реальность не так щедра, я бы использовал наложения войны классификаторы функций и версий. Структура файловой системы и pom.xmls будут такими:

myproject                (packaging: pom, version: 1.0.0-SNAPSHOT)
+-- myproject-war        (packaging: war, version: 1.0.0-SNAPSHOT)
+-- myproject-war-jboss  (packaging: war, version: 1.0.0-jboss-SNAPSHOT)
+-- myproject-war-jetty  (packaging: war, version: 1.0.0-jetty-SNAPSHOT)

Две войны, специфичные для сервера приложений, содержат только файлы, специфичные для сервера приложений, и импортируют простую войну в качестве наложения. В вашем репозитории Maven развернуты три разные войны, отличающиеся номером версии только частью классификатора (например, myproject-war-1.0.0-jboss).

В идеале вы должны установить управление версиями в pom.xml с чем-то вроде <version>${project.parent.version}-jboss</version>, но я не совсем уверен, что это можно комбинировать с классификатором SNAPSHOT и все еще работать.

person Barend    schedule 24.09.2010
comment
Мне нравится идея с наложением, я не подумал об этом. Есть ли причина, по которой вы не будете использовать профили Maven для включения/исключения определенных файлов в WAR? - person HDave; 25.09.2010
comment
Я предпочитаю один каталог, один pom.xml, одно выполнение mvn, один артефакт репозитория. Я считаю, что это более предсказуемо, меньше шансов столкнуться со странностями Maven. - person Barend; 25.09.2010