Как стать автором
Обновить

Простая инсталляция Java веб-приложения (часть 1)

Время на прочтение 3 мин
Количество просмотров 3.6K
Итак, вы написали свое супер веб-приложение на Java и теперь хотите что бы как можно больше людей его скачало, задеплоило и начало пользоваться? Все отлично, только для для некорых java-прораммистов, особенно для тех, кто последние цать лет прожил в мире J2EE может быть открытием, что для 99,9% людей в этом мире слова «Просто задеплойте этот WAR-ник на ваш любимый сервер» окажутся пустым звуком. Ну ок, может не 99,9% а 99,8% — ну или около того.

Ниже следует первая часть туториала о том, как из вашего варника сделать красивый Windows Installer (да-да, мало того что большинство людей не знают слова деплой, так они еще и Windows пользуются!) с использованием WiX


Постановка задачи


Итак, мы имеем:
  • Само веб приложение написанное на Java. В данном случае предполагается что сборка приложения ведется с помощью maven-а (если вы еще этого не делаете — очень рекомендую). В результате сборки вы получаете war-файл (ок — не полноценный EAR — но для EAR вам просто необходимо будет паковать другой сервер)
  • Предполагается что данное приложение работает под сервером Jetty 6.0.x (если нет — опять-таки — вам прсто надо будет паковать другой сервер)

Хотим создать установку нашего приложение через Windows Installer. В ходе установки необходимо:
  • Выполять стандартные действия (спросить куда ставить, показать лицензию, показать прогресс)
  • Установить само приложение в указанное место
  • Сконфигурировать его запуск в качестве сервиса
  • Добавить ссылку на главную страницу приложения на Десктоп (что бы пользователь мог лекго к нему обратиться)


Чем будем пользоваться:
  • maven для сборки
  • jetty в качестве сервера
  • WiX для создания инсталлера

Все продукты являются Open-Source

Некоторые моменты возможно будут раскрыты тут не полностью — любые вопросы и пожелания приветсвуются. Данное решение применено для создания инсталлера для проекта EmForge — данный проект является open-source, так что рабочий пример можно получить из его исходников (например через web-viewer: www.emforge.org/browser/EmForge/trunk или просто забрав исходники из svn-репозитория svn.emforge.org/svn/emforge/EmForge/trunk

В данной части мы рассмотрим процесс создания zip-архива с приложением, готовым к запуску

Итак, поехали…

Паковка приложения вместе с Jetty


В первую очередь, нам необходимо избавить пользователя от понимания слова Deploy. Есть несколько возможных решений, можно например упаковать простенький сервер прям в war-ник, как это делают в Hudson-е (интересное решение — но с ним я еще не разбирался). Мы же пойдем другим путем — и создадим Zip-архив в который положим Jetty, сконфигурированный для запуска нашего war-ника.

Идея была взята с этого блога: blog.devspan.com/2008/02/creating-distributable-war-project-with.html — тут я опишу только основную идею (если надо — скажите — распишу подробней):
  • У нас есть веб-проект собираемый мавеном (http://www.emforge.org/browser/EmForge/trunk/emforge-web в нашем случае)
  • Создаем новый проект launcher. Структу проекта и требуемые файлы можно просто скопировать с emforge-launcher допилив его напильником под ваш проект: www.emforge.org/browser/EmForge/trunk/emforge-launcher
  • Конфигурируем в данном проекте maven-assembla-plugin, что бы тот брал варник и требуемые jetty-библиотеки из maven-репозитория и клал их в «правильные» места
  • Сначала запускаем mvn clean install в нашем веб-проекте, что бы maven собрал и положил наш проект в локальный репозиторий
  • Затем запускаем mvn clean assembly:assembly в launcher-проекте — в результате чего мы получим требуемый zip


В результате мы получаем zip в котором будет лежать jetty и ваше приложение. Структура зипа будет примерно следующая:
- etc Каталог с настройками Jetty
- jetty.xml
- jetty-win32-service.xml
- webdefault.xml
- lib Каталог с с файлами, требуемыми для старта jetty
- wrapper.dll
- wrapper-3.2.0.jar
- jety-6.1.14.jar
- jetty-util-6.1.14.jar
- jetty-win32-service-java-6.1.14.jar
- servlet-api-2.5-6.1.14.jar
- start-6.1.14.jar
-logs Место куда должны ложиться логи
- webapps
- root А тут должно оказаться ваше приложение

Jetty-Service.exe Этот файл поможет запустить jetty как сервис
jetty-service.conf А это го настройка


Пожалуйста проверьте:
  • jetty-service.conf должен содержать имя вашего сервиса. По умолчанию это будет Jetty — но наверняка вы захотите что-нибудь другое
  • так же проверьте что jetty-service.conf содержит правильные пути на libs & logs
  • В jetty.xml проверьте порт, на котором будет запущен сервис — по умолчанию это 8080, но этот порт очень широко используется и потому лучше использовать какой-нибудь другой порт
  • каталог root должен содержать ваше веб-приложение, то есть каталог WEB-INF должен лежать прям под root


Ну вот и все на данный момент. В принципе, на этом можно и остановится — не ленивый пользователь уже может просто скачать зип, распаковать его и запустить сервер с вашим приложением при помощи run.bat или run.sh

О решении для «ленивых» пользователей мы поговорим в следующей серии
Теги:
Хабы:
+9
Комментарии 15
Комментарии Комментарии 15

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн