Tomcat не автоматически развертывает файл войны - PullRequest
30 голосов
/ 05 января 2011

Я выполнил следующие действия

  • Завершение работы Tomcat
  • Развертывание файла войны с отметкой времени 1 декабря
  • Запуск Tomcat - при этом был создан каталог для разнесенных файлов.развернутый военный файл.
  • Stop Tomcat
  • Обновлен файл войны с новым файлом с отметкой времени 3 декабря
  • Перезапустите Tomcat

Я обнаружил, что когда яперезапустил Tomcat, существующие файлы в ранее развернутой папке не были обновлены.Разве обновление файла war не должно обновлять соответствующий файл класса jsp?

Я посмотрел документацию и нашел это http://tomcat.apache.org/tomcat-5.5-doc/config/host.html. Следующая цитата в разделе "Автоматическое развертывание приложений"

В дополнение к автоматическому развертыванию, которое происходит во время запуска,вы также можете запросить, чтобы новые файлы конфигурации XML, файлы WAR или подкаталоги были перенесены в каталог appBase (или
$ CATALINA_HOME / conf / [имя_двигателя] / [имя_хоста] в случае файла конфигурации XML) во времяTomcat работает будет автоматически развернут в соответствии с правилами, описанными выше.Автоматический развертыватель также будет отслеживать веб-приложения на наличие следующих изменений:

  • Обновление файла WEB-INF / web.xml приведет к перезагрузке веб-приложения
  • Обновлениедля развернутой WAR вызовет отмену развертывания (с удалением расширенного веб-приложения) с последующим развертыванием
  • Обновление файла конфигурации XML вызовет отмену развертывания (без удаления какого-либо расширенного каталога) с последующим развертыванием соответствующего веб-приложения

Должны ли файлы автоматически обновляться в результате выполнения пункта 2 выше?

Для автоматического развертывания установлено значение true в server.xml

Ответы [ 6 ]

30 голосов
/ 05 января 2011

Исторически сложилось так, что tomcat никогда не обновлял развернутый каталог, когда вы просто добавляете новый jar, по крайней мере для меня. Я всегда предполагал, что это ошибка, но никогда не рассматривал это, поскольку есть простое решение. Оба из них должны работать нормально:

Разверните файл war с помощью встроенного приложения Manager. Хорошо, если вы в порядке с использованием графического интерфейса для управления производством. Примечание Этот инструмент имел проблемы, если вы развертывали несколько раз (опять же, я никогда не углублялся в детали), но перезапуск Tomcat работал нормально. Стоп, удаление и удаление. Остановите Tomcat, удалите разобранный каталог, вставьте новый файл войны.
7 голосов
/ 25 ноября 2013

Добавить autoDeploy = true. У меня работает

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
6 голосов
/ 05 января 2011

Я обычно устанавливаю для autodeploy в server.xml значение false. Это позволяет мне бросить новую войну и перезапустить tomcat, не имея дело с соответствующим каталогом.

2 голосов
/ 05 января 2011

Да, разобранный каталог должен быть обновлен, однако вам не нужно останавливать Tomcat, чтобы он работал - он будет работать с запущенным Tomcat.Можете ли вы попробовать это снова, не останавливая Tomcat между обновлениями?

Также я использую встроенное приложение Manager, которое позволяет мне обновлять war-файлы в любом месте домена, не будучи root (или apache, или любой другой tomcat, который работаеткак).Это очень удобно и может быть встроено в скрипт Ant.

1 голос
/ 22 ноября 2014

Поскольку я использую maven для генерации своих сборок в tomcat внутри коробки с Ubuntu, у меня есть сценарий

install_wars.sh

Со следующим содержанием:

mvn clean install
service tomcat7 stop
find /var/lib/tomcat7/webapps/ -mindepth 1 -maxdepth 1 -type d -exec rm -rf {} \;
find . -name *.war -exec cp {} /var/lib/tomcat7/webapps/ \;
service tomcat7 start

Вы можете изменить путь и команды maven соответственно.

Функция остановки / запуска tomcat предназначена для того, чтобы избежать утечек памяти, которые могут замедлить работу приложения после нескольких повторных развертываний.

1 голос
/ 02 сентября 2014

В моем случае я называю артефакт

ROOT.WAR

но должно быть

ROOT.war

Ура!

...