Я пробовал эту штуку последние 3 часа и ничего. Мне нужно отбросить новую войну и настроить автоматическое развертывание Tomcat. Этого не происходит. Вот моя упрощенная конфигурация:
server.xml
<Engine name="Catalina" defaultHost="localhost">
<Host name="something.com" appBase="/var/www/something.com/webapps"
unpackWARs="false" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="application.war" debug="0" reloadable="true">
... some realm and data source stuff here
</Context>
</Host>
</Engine>
Когда я запускаю tomcat, все работает отлично. Я пробовал два подхода:
/var/www/something.com/webapps/application.war
.В обоих случаях я вижу catalina.err
с тем же сообщением:
INFO: Undeploying context [/application]
Без соответствующего
INFO: Deploying web application archive application.war
который я получаю, когда перезапускаю tomcat. У меня такое ощущение, что это не внутри CATALINA_BASE/webapps
но не знаю, что делать дальше. Любая помощь?
Это могло быть несколько вещей. Некоторые конкретные проблемы, с которыми я столкнулся:
(1) Права доступа к файлам. Убедитесь, что каталог webapps, ваш рабочий каталог, сама война и любые специальные файлы, к которым он обращается, доступны для чтения / записи пользователю, запускающему Tomcat (в идеале они должны принадлежать этому пользователю).
(2) Предыдущая версия удалена не полностью. Попробуйте остановить Tomcat, удалить войну и соответствующую папку, скопировать новую войну, а затем запустить Tomcat. Если это сработает, проблема может быть связана с файлами. (Например, у меня есть приложение, которое не очищается полностью).
(3) Приложение может не инициализироваться должным образом из-за проблем с приложением. Если война автоматически развертывается в папке, автоматическое развертывание работает, но приложение не полностью инициализировано. Ищите сообщения журнала. В зависимости от вашего приложения это может быть tomcat / logs, текущий каталог или стандартный каталог. По возможности измените свойства журнала (например, файл log4j.properties), чтобы отображать сообщения уровня отладки.
(4) Пермские проблемы памяти. Когда вы перезагружаете приложение в Tomcat, оно использует память Permgen. По определению, это невозможно восстановить. Перезагрузите слишком много, и Tomcat выйдет из строя с ошибкой нехватки памяти (обычно вы можете увидеть это в своих журналах). Либо настройте больше permgen, либо, что еще лучше, отключите / перезапустите Tomcat при повторном развертывании приложения.
Я думаю виноват unpackWARs="false"
Из недавняя публикация в stackoverflow, было обнаружено, что unpackWARs="false"
приводит к тому, что новая версия WAR не обнаруживается. По какой-то конкретной причине false
?
Не должно быть docBase="application"
не docBase="application.war"
? Если я правильно понимаю, это заставит Tomcat сначала искать папку /var/www/something.com/webapps/application/
и если этого не существует, ищите /var/www/something.com/webapps/application.war
Если вы используете maven
, в pom.xml вы можете установить тег, например
<properties>
<local.tomcat.autodeploy.folder>//pathtoTomcatWebapp folder</local.tomcat.autodeploy.folder>
<local.build.finalName>nameOfContext</local.build.finalName>
<localonly>true</localonly>
<dev.tomcat.autodeploy.folder>specify location</dev.tomcat.autodeploy.folder>
<dev.build.finalName>nameOfContext</dev.build.finalName>
</properties>
Хотя это старая ветка, я просто хотел указать на одну вещь. В среде IDE щелкните правой кнопкой мыши сервер, найдите расположение серверов и выберите «Использовать установку Tomcat». Это возьмет под контроль установленное место и приведет к войне.
Я столкнулся с этой проблемой в официальном контейнере докеров Tomcat. С участием
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
в моем server.xml всякий раз, когда я копировал файл * .war в папку appBase, он мог обнаруживать и отображать на странице Manager, но не мог его развернуть. После нажатия кнопки «Пуск» он был развернут, но это не цель. Из Tomcat HowTos в официальной документации в разделе «Развертывание на работающем сервере Tomcat» я получил и попробовал скопировать развернутую форму моего военного файла в папку appBase, и это сработало. Я до сих пор не могу понять, почему он не может взорвать файл войны в autoDeploy и unpackWARs верны. Но предоставление ему и распакованного файла war (в разобранном виде) похоже на помощь серверу tomcat в его развертывании. Вот моя командная строка, чтобы скопировать ее в контейнер докера:
docker cp "D: \ MyMavenProject \ target \ MyProject-0.0.1-SNAPSHOT \" tomcat_srvr: /usr/local/tomcat/webapps/MyProject-0.0.1-SNAPSHOT
tomcat_srvr - это имя моего контейнера Tomcat Docker.
Надеюсь, это поможет другим;