Tomcat没有自动部署war文件

Posted

技术标签:

【中文标题】Tomcat没有自动部署war文件【英文标题】:Tomcat not autodeploying war file 【发布时间】:2011-06-04 00:15:16 【问题描述】:

我按照以下步骤操作

关闭 Tomcat 部署了一个时间戳为 12 月 1 日的 war 文件 启动 Tomcat - 这为部署的战争文件创建了展开目录。 停止 Tomcat 使用时间戳为 12 月 3 日的新文件更新了 war 文件 重启Tomcat

我发现当我重新启动Tomcat时,之前扩展的文件夹中的现有文件没有更新。对war文件的更新不应该更新了相关的jsp、class文件吗?

我查看了文档并找到了这个http://tomcat.apache.org/tomcat-5.5-doc/config/host.html。 “自动应用程序部署”下的以下引用

除了自动 启动时发生的部署 时间,你也可以要求新的 XML 配置文件,WAR 文件或子目录 放入 appBase(或 $CATALINA_HOME/conf/[engine_name]/[host_name] 在 XML 配置的情况下 文件)目录,而 Tomcat 是 运行将自动 部署,按照规则 如上所述。自动部署器 还将跟踪 Web 应用程序 以下更改:

对 WEB-INF/web.xml 的更新 文件将触发重新加载网络 应用 对 WAR 的更新 已扩展的将触发 取消部署(删除 扩展的 webapp),然后是 部署 对 XML 的更新 配置文件将触发 取消部署(不删除任何 扩展目录),后跟一个 相关网络的部署 应用

是否应该根据上述第 2 点自动更新文件?

在 server.xml 中将 Autodeploy 设置为 true

【问题讨论】:

【参考方案1】:

当我使用 maven 在 ubuntu 框内的 tomcat 中生成构建时,我有一个名为

的脚本

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 停止/启动是为了避免任何内存泄漏,从而在多次重新部署后使应用程序变慢。

【讨论】:

【参考方案2】:

在我的例子中,我将其命名为 artifact

ROOT.WAR

但应该是

ROOT.war

干杯!

【讨论】:

【参考方案3】:

添加自动部署 = true。为我工作

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">

【讨论】:

看起来像一个 XML 元素。这应该添加到什么文件中? 在 tomcat conf 目录下编辑 server.xml 就可以了 现在tomcat默认都有了【参考方案4】:

我通常将 server.xml 中的自动部署设置为 false。这让我可以放弃新的战争并重新启动tomcat,而无需处理相应的目录。

【讨论】:

【参考方案5】:

从历史上看,当你放入一个新的 jar 时,tomcat 从来没有更新过分解的目录,至少对我来说是这样。我一直认为这是一个错误,但从未调查过它,因为有一个简单的解决方案。这两个都应该可以正常工作:

使用内置的 Manager 应用程序部署 war 文件。如果您可以使用 GUI 进行生产管理,那很好。 注意如果您多次部署此工具会出现问题(同样,我从未深入研究过细节),但 Tomcat 重启工作正常。 停止、删除和删除。停止 Tomcat,删除分解后的目录,放入新的 war 文件。

【讨论】:

+1 相同。我采用了第二种解决方案,只需编写一个脚本即可。 我使用第二种方法,但没有删除展开的目录。那是不工作的位:0 Tomcat 用这一段解释了这一点:“应用程序库 (appBase) 目录中没有相应的同名目录(没有“.war”扩展名)的任何 Web 应用程序归档文件将自动展开,除非 unpackWARs 属性设置为 false。如果重新部署更新的 WAR 文件,请务必在重启 Tomcat 时删除展开的目录,这样更新的 WAR 文件会重新展开(注意自动部署器,如果启用,将在删除之前展开的目录后自动展开更新的 WAR 文件)。" 问题是,当你在生产中时,重启应用服务器并不容易,特别是如果其他应用在该服务器实例下运行 嗨,谁能告诉我Drop在这里是什么?【参考方案6】:

是的,展开的目录应该被更新,但是你不需要停止 Tomcat 来让它工作——它会在 Tomcat 运行的情况下工作。您可以在更新之间不停止 Tomcat 的情况下再试一次吗?

我还使用内置的管理器应用程序,它允许我在域中的任何位置更新战争文件,而无需成为 root(或 apache 或任何运行的 Tomcat)。这很方便,可以内置到 Ant 脚本中。

【讨论】:

我们没有在生产环境中安装管理器或管理应用程序,所以这一切都是通过脚本完成的。我同意应该更新分解的文件夹。我想知道我关闭tomcat的事实是否会导致这种情况。

以上是关于Tomcat没有自动部署war文件的主要内容,如果未能解决你的问题,请参考以下文章

自动部署批处理

如何让 tomcat 从目录中自动部署 WAR 文件,但仍使用原始 appBase 目录

在tomcat服务器中部署war文件

在Tomcat上部署war文件

在没有 Tomcat 管理器的情况下从 jenkins 自动部署战争文件

自动部署基于Maven的war文件到远程Tomcat