Итак, вы написали свое супер веб-приложение на Java и теперь хотите что бы как можно больше людей его скачало, задеплоило и начало пользоваться? Все отлично, только для для некорых java-прораммистов, особенно для тех, кто последние цать лет прожил в мире J2EE может быть открытием, что для 99,9% людей в этом мире слова «Просто задеплойте этот WAR-ник на ваш любимый сервер» окажутся пустым звуком. Ну ок, может не 99,9% а 99,8% — ну или около того.
Ниже следует первая часть туториала о том, как из вашего варника сделать красивый Windows Installer (да-да, мало того что большинство людей не знают слова деплой, так они еще и Windows пользуются!) с использованием WiX
Итак, мы имеем:
Хотим создать установку нашего приложение через Windows Installer. В ходе установки необходимо:
Чем будем пользоваться:
Все продукты являются Open-Source
Некоторые моменты возможно будут раскрыты тут не полностью — любые вопросы и пожелания приветсвуются. Данное решение применено для создания инсталлера для проекта EmForge — данный проект является open-source, так что рабочий пример можно получить из его исходников (например через web-viewer: www.emforge.org/browser/EmForge/trunk или просто забрав исходники из svn-репозитория svn.emforge.org/svn/emforge/EmForge/trunk
В данной части мы рассмотрим процесс создания zip-архива с приложением, готовым к запуску
Итак, поехали…
В первую очередь, нам необходимо избавить пользователя от понимания слова Deploy. Есть несколько возможных решений, можно например упаковать простенький сервер прям в war-ник, как это делают в Hudson-е (интересное решение — но с ним я еще не разбирался). Мы же пойдем другим путем — и создадим Zip-архив в который положим Jetty, сконфигурированный для запуска нашего war-ника.
Идея была взята с этого блога: blog.devspan.com/2008/02/creating-distributable-war-project-with.html — тут я опишу только основную идею (если надо — скажите — распишу подробней):
В результате мы получаем zip в котором будет лежать jetty и ваше приложение. Структура зипа будет примерно следующая:
Пожалуйста проверьте:
Ну вот и все на данный момент. В принципе, на этом можно и остановится — не ленивый пользователь уже может просто скачать зип, распаковать его и запустить сервер с вашим приложением при помощи run.bat или run.sh
О решении для «ленивых» пользователей мы поговорим в следующей серии
Ниже следует первая часть туториала о том, как из вашего варника сделать красивый Windows Installer (да-да, мало того что большинство людей не знают слова деплой, так они еще и Windows пользуются!) с использованием WiX
Постановка задачи
Итак, мы имеем:
- Само веб приложение написанное на Java. В данном случае предполагается что сборка приложения ведется с помощью maven-а (если вы еще этого не делаете — очень рекомендую). В результате сборки вы получаете war-файл (ок — не полноценный EAR — но для EAR вам просто необходимо будет паковать другой сервер)
- Предполагается что данное приложение работает под сервером Jetty 6.0.x (если нет — опять-таки — вам прсто надо будет паковать другой сервер)
Хотим создать установку нашего приложение через Windows Installer. В ходе установки необходимо:
- Выполять стандартные действия (спросить куда ставить, показать лицензию, показать прогресс)
- Установить само приложение в указанное место
- Сконфигурировать его запуск в качестве сервиса
- Добавить ссылку на главную страницу приложения на Десктоп (что бы пользователь мог лекго к нему обратиться)
Чем будем пользоваться:
Все продукты являются 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
О решении для «ленивых» пользователей мы поговорим в следующей серии