1. Сначала короткий ответ
Используйте комбинацию:
- maven для управления всем процессом строительства и развертывания ( профили и фильтрация ресурсов будут для вас очень полезными функциями)
- shell скрипты, использующие команду asadmin (альтернатива одному из плагинов Glassfish maven
- jenkins для запуска сборок maven либо на периодической основе, либо в результате отправки нового кода в вашу систему управления версиями.
- Netbeans имеет отличную интеграцию как со Glassfish, так и с maven и является моей любимой Java EE IDE:
2. Теперь немного предыстории ...
Чтобы ответить на этот вопрос, полезно взять более широкую перспективу и рассмотреть весь жизненный цикл разработки / развертывания . Фактическое развертывание архива .war или .ear в Glassfish - это только один шаг цикла.
Если вы хотите быть действительно эффективным, вам нужно рассмотреть комбинацию инструментов и методов для автоматизации создания и развертывания ваших программных приложений. Это особенно верно, если вы работаете в реальной среде с машинами разработчика, машинами непрерывной интеграции, машинами контроля качества и производственными машинами.
Я подробно остановлюсь на этих пунктах в следующих параграфах. В частности, я объясню, почему я считаю, что сегодня пользовательские сценарии оболочки, управляемые maven, лучше, чем плагины glassfish maven, доступные в сообществе.
3. Управление сборкой с maven
Для многих людей, занимающихся java разработкой, maven является хорошо известным инструментом. Для других, здесь очень краткое введение. Цель maven - автоматизировать создание программных артефактов . Это фреймворк (в том же смысле, что и объектно-ориентированный фреймворк), что означает:
- определяет стандартный способ сборки, упаковки и тестирования программного обеспечения
- он предоставляет вам точки расширения для прикрепления пользовательского поведения по этому стандартному пути
По сути, когда вы используете maven, вы описываете, какой программный артефакт вы создаете (это .jar, .war, приложение для Android и т. Д.). По умолчанию maven ожидает найти исходные файлы, тестовые файлы и ресурсы в определенных местах. По умолчанию maven знает, что сборка программного обеспечения требует прохождения разных этапов: компиляции, модульного тестирования, упаковки, развертывания, интеграционного тестирования, генерации документации и т. Д.
Еще одна вещь, которую maven делает для вас (и которая часто является первой причиной использования инструмента), - это управление зависимостями. Maven указывает способ идентификации библиотек (с именем и версией), которые доступны через репозитории (существуют как публичные, глобальные и частные репозитории). В maven вы указываете такие вещи, как «Я зависим от magiglib версии 1.2.2». Когда вы просите, чтобы maven выполнил сборку, она автоматически загрузит библиотеку, сохранит ее в локальном хранилище и будет использовать ее для сборки и упаковки. Нет необходимости иметь дело с ручной передачей файлов .jar, нет риска появления ошибок, потому что разные версии одной и той же библиотеки используются разными разработчиками или на разных этапах.
И последнее, но не менее важное: maven предлагает возможность настраивать структуру вашего программного обеспечения в зависимости от целевого компьютера развертывания. Подумайте о следующих случаях использования:
Во время разработки думайте, что у каждого разработчика может быть своя инсталляция (mysql может не прослушивать один и тот же порт TCP, glassfish может быть не установлен в одном каталоге, пароли могут отличаться и т. Д.).
Машина разработки, очевидно, отличается от среды непрерывной интеграции, которая сама по себе отличается от QA или производственной среды (опять же, просто подумайте о сети, файловой системе, учетных данных).
Maven поддерживает эти варианты использования с комбинацией переменных , профилей и фильтрации ресурсов :
- A переменная , ну, в общем, переменная, как в любой среде программирования.Когда вы используете maven, вы пишете файл конфигурации XML (pom.xml) и можете использовать в нем переменные.Это делает вашу систему сборки настраиваемой и динамичной.Порт, на котором прослушивается mysql, или каталог, в котором установлен glassfish, можно определить как переменные.
- A profile - это способ присвоения значений множеству переменных maven.Как правило, у каждого разработчика есть свой профиль, у каждой среды (от непрерывной интеграции до производственной) будет свой профиль и т. Д.
- Фильтрация ресурсов позволяет ссылаться на переменные maven в исходных файлах,файлы ресурсов и файлы конфигурации.Например, в файле Java вы можете вставить следующую строку $ {myvar}.Если вы сконфигурируете maven для выполнения фильтрации ресурсов, он заменит $ {myvar} на значение переменной maven myvar (которая может быть определена в текущем профиле).
Maven является чрезвычайно мощныминструмент, и как таковой имеет кривую обучения.Если вы используете Netbeans, вы на самом деле можете создать управляемый Maven проект с помощью пары щелчков мыши и воспользоваться базовыми функциями (например, управление зависимостями).Для продвинутых тем доступна очень хорошая документация.Я не буду вдаваться в подробности здесь.
4.Плагин Glassfish ... или нет?
Как только вы поняли ценность maven и решили использовать его, следующий вопрос - как вы можете использовать его для фактического развертывания .war или.ear архив в Glassfish (локально или удаленно).Здесь у вас есть несколько вариантов, и за эти годы мы узнали немало вещей (мы уже несколько лет используем maven с glassfish).
Первое, что вы можете сделать, этоиспользуйте один из плагинов Glassfish Maven.Доступны разные плагины.У них совершенно разные возможности и разные уровни поддержки.Оказывается, что самый мощный плагин на самом деле больше не поддерживается и не работает с Glassfish 3 из коробки.Плагин был интересен тем, что он позволял не только развертывать архивы в Glassfish, но и создавать ресурсы (пулы jdbc, очереди jms и т. Д.).Это также позволило создавать домены Glassfish на лету (очень полезно для запуска интеграционных тестов и проверки того, что для этого был использован новый домен).В любом случае, новые плагины (которые описаны в документации по продукту) не настолько мощны и сфокусированы исключительно на задаче развертывания.
В системе сборки, которую мы создавали и развивали в течение многих лет, мы смоглидобиться большого контроля и гибкости, комбинируя плагин Glassfish Maven с профилями и фильтрацией ресурсов.Решение работает, оно надежное, но довольно сложное (наши pom.xml и settings.xml сильно выросли и стали тяжелыми).
Итак, если я настраивал новую систему сборкис нуля, я, вероятно, поступил бы немного иначе .Если вы посмотрите на код подключаемых модулей Glassfish Maven, вы увидите, что они в значительной степени являются обертками для инструмента командной строки asadmin , предоставляемого Glassfish (и это потому, что параметры и поведение asadmin изменились содна версия Glassfish другой, что плагины Maven были сломаны).
5.Путь вперед
Что бы я сделал:
написать набор сценариев оболочки для создания glassfish domains ,создать ресурсы (jdbc, jms и т. д.), внедрить .war и .ear.Скрипты будут использовать asadmin для взаимодействия со стеклянной рыбой (можно использовать asadmin и локально и удаленно );
встроить переменные maven в эти сценарии и использовать фильтрацию ресурсов для динамического создания версий сценариев, специфичных для среды ;
используйте плагин maven exec для запуска сценариев на разных этапах цикла сборки maven (интеграционный тест, запуск, пользовательские цели и т. Д.).