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 目录