Разверните 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 и просто установить ее, не требуя дополнительных инструкций по развертыванию. Кроме того, поскольку вы выполняете развертывание только для определенного сервера, вы можете использовать тот конкретный сервер