无法在 tomcat 中自动部署 war

无法在 tomcat 中自动部署 war

我已经尝试了 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时,一切都运行良好。 我尝试了两种方法:

  1. 使用 scp 在该位置复制一场新的战争。
  2. 感人/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

可能有很多原因。我遇到的一些具体问题:

(1)文件权限。确保 webapps 目录、工作目录、war 本身以及它访问的任何特殊文件都可以由运行 Tomcat 的用户读取/写入(理想情况下,它们应该由该用户拥有)。

(2) 之前的版本没有完全删除。尝试停止 Tomcat,删除 war 和匹配文件夹,复制新的 war,然后启动 Tomcat。如果成功,则问题可能出在遗留文件上。(例如,我有一个应用程序没有完全清理自身)。

(3) 由于应用程序存在问题,应用程序可能无法正确初始化。如果 war 自动部署到文件夹中,则自动部署正在运行,但应用程序未完全初始化。查找日志消息。根据您的应用程序,这可能位于 tomcat/logs、当前目录或标准输出中。如果可以,请更改日志属性(例如 log4j.properties 文件)以显示调试级别消息。

(4) Permgen 内存问题。当您在 Tomcat 中重新加载应用程序时,它会耗尽 Permgen 内存。根据定义,这是无法恢复的。重新加载太多次,Tomcat 就会因内存不足错误而崩溃(您通常可以在日志中看到这一点)。要么配置更多的 permgen,要么更好的办法是在重新部署应用程序时关闭/重新启动 Tomcat。

http://wiki.apache.org/tomcat/OutOfMemory

答案2

我认为罪魁祸首是unpackWARs="false"

最近在 stackoverflow 上发帖,发现unpackWARs="false"导致无法检测到新版本的WAR。有什么具体原因吗false

答案3

难道不应该吗docBase="application"docBase="application.war"如果我理解正确的话,这将导致 Tomcat 首先查找一个文件夹/var/www/something.com/webapps/application/,如果该文件夹不存在,则查找/var/www/something.com/webapps/application.war

答案4

虽然这是一个老话题,但我只想指出一件事。在 IDE 中右键单击服务器并查找服务器位置并选择使用 Tomcat 安装。这将控制安装位置并引发战争。

相关内容