Разверните WAR или "fat" JAR?
Я замечаю много проектов (DropWizard, Grails и т.д.), которые начинают охватывать понятие "толстого" JAR (с использованием встроенного веб-сервера, такого как Jetty или Tomcat), и традиционного развертывания WAR. Оба метода включают в себя один процесс JVM (т.е. Независимо от того, сколько ВОИС было развернуто для Tomcat, это все тот же процесс JVM).
При каких обстоятельствах предпочтительным является метод развертывания другого?
Ответы
Ответ 1
Вот несколько причин:
В пользу JAR:
- Простое создание и развертывание.
- Встраиваемые серверы, такие как Jetty, просты в эксплуатации.
- Приложения легко запускаются пользователями, и они могут работать на своих персональных компьютерах, потому что они легкие.
- Запуск и остановка приложений потребует меньше знаний, чем управление веб-серверами.
В пользу WAR или EAR:
- Сервер будет предоставлять такие функции, как развертывание, перезагрузка, безопасность и т.д. для нескольких веб-приложений одновременно.
- Возможно, отдельная группа развертывания может обрабатывать запуск и остановку приложений.
- Если ваши руководители любят следовать правилам, они с удовольствием обнаруживают, что вы их не нарушаете.
Сказав это, вы всегда можете предоставить 2 или 3 типа исполняемых файлов для удовлетворения всех потребностей. Любой инструмент построения упрощает это.
Ответ 2
Распространение приложения со встроенным web-сервером позволяет выполнять автономную настройку и запускать его, просто позвонив java -jar application.jar
.
Однако могут быть пользователи, которые хотят контролировать, какой веб-сервер используется или кто хочет развернуть несколько приложений на одном веб-сервере (например, для предотвращения столкновений портов, особенно с портами 80 и 8080). В этом случае "жирная" банка может вызвать проблемы или, по крайней мере, некоторый ненужный код и, следовательно, больший объем памяти.
ИМХО наилучшим подходом к этим двум случаям было бы предоставить два артефакта: "жирную" банку для (проще) автономной установки и только для приложений/ушей для приложений, желающих развернуть приложение в своем собственном контейнере.
Ответ 3
Я думаю о перспективе пользователя. Вы могли бы обернуть эту банку с одним ящиком внутри .exe или .dmg и просто установить ее, не требуя дополнительных инструкций по развертыванию. Кроме того, поскольку вы выполняете развертывание только для определенного сервера, вы можете использовать тот конкретный сервер