我在工作中开发一个基于 Web 的 Java 应用程序,并且(显然)必须在开发期间在本地运行它。我已经弄清楚了 Tomcat 文档,并且有一个合适的 context.xml 文件,/etc/tomcat6/Catalina/localhost/
但 Tomcat 时不时会决定删除它!这意味着我必须将其放回去并重新启动 Tomcat。
为什么会这样?我搜索了 Tomcat 文档,但还是一无所知。
(哦是的:它实际上并没有被调用,context.xml
但这owners.xml
是该应用程序的 HTTP 路径前缀。)
更新
我现在看到 Tomcat 删除了该文件当 Tomcat 正在运行时。我想我需要提交一个错误...
答案1
快速摘要:有几种情况(例如更改 war 文件、删除 web 应用程序或用新内容替换它)会导致 Tomcat 取消部署上下文,包括删除上下文文件。
细节:Tomcat 是否执行autoDeployment
(意味着检查 .xml 描述符中的更改以及检查 webapp 目录中的更改)取决于:
server.xml 位于 $CATALINA_HOME/conf/server.xml 部分:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
您还可以在上下文文件中设置此属性,重载值
引用文档中autoDeploy=true
可能导致删除上下文文件的情况:
- 删除 WAR 文件将触发应用程序的取消部署删除所有关联的扩展目录、上下文文件和工作目录。
- 删除目录将触发应用程序的取消部署删除所有关联的上下文文件和工作目录。
- 更新 WAR 文件将触发应用程序的取消部署删除所有关联的扩展目录、上下文文件和工作目录。
- 更新目录(而不是目录内容)将触发应用程序的取消部署删除所有关联的上下文文件和工作目录。
详尽细节:http://tomcat.apache.org/tomcat-6.0-doc/config/host.html#Automatic%20Application%20Deployment
答案2
如果你不需要自动部署功能,例如在生产环境中,您可以考虑 conf/Catalina/localhost 上下文文件中的以下属性:
- 自动部署=“false”
- 并且 deployXML="false"
autoDeploy="false" 可能无法单独工作,因为应用程序 context.xml(在 META-INF 中)可以覆盖 autoDeploy 的 server.xml 设置。
- 应用程序的 META-INF/context.xml 将在开发环境中使用,并带有自动部署
- 生产中的 conf/Catalina/localhost 上下文,没有自动部署。
deployXML 属性文档属性文档值得一读(§标准实施)。
详尽的 autoDeploy 用户案例,当上下文被删除时:即应用程序未部署,可以找到记录的用户案例这里。
答案3
无法回答为什么少量。
然而,此链接您可以通过设置来停止此autoDeploy="false"
操作server.xml
答案4
我意识到这是一个老话题,但我想我会分享我发现的解决这个问题的方法......
每次我为我的应用程序部署 war 文件的新副本时,我的桌面版 tomcat 的 context.xml 文件都会受到破坏,这个问题一直存在。
问题是由于我直接在文件系统上更改了此文件。解决问题的方法是使用 Eclipse 编辑器编辑 context.xml 文件。在我的 Eclipse 中,有一个“服务器”项目,展开后,可以看到一些文件,例如 context.xml 和 server.xml。看来,如果您从这里修改文件而不是转到文件系统,您的更改将保留。
我在以下线程中找到了此解决方案: https://www.liferay.com/community/forums/-/message_boards/message/16511799
我希望这对其他人有帮助!
—斯蒂芬·S