Tomcat文档(http://tomcat.apache.org/tomcat-6.0-doc/config/context.html)
仅当应用程序中不存在上下文文件时 $ CATALINA_BASE / conf / [enginename] / [hostname] /,位于单个文件中 应用程序文件中的/META-INF/context.xml。如果是网络 应用程序打包为WAR,然后是/META-INF/context.xml 复制到$ CATALINA_BASE / conf / [enginename] / [hostname] /并重命名为 匹配应用程序的上下文路径。 一旦此文件存在,它就会 如果带有较新的/META-INF/context.xml的新WAR,则不能替换 放在主持人的appBase中。
粗体文字很清楚。但我通知不是真的。 (我确实需要这种行为)
以下是步骤:
conf\Catalina\localhost\aaa.xml
确定conf\Catalina\localhost\aaa.xml
已更改!!! 有什么问题?这是一个错误还是一个隐藏的功能?
背景 - 我想解决的问题:
独立于配置的构建和安装。我厂运送战争档案。客户端使用自己的设置来配置他的Tomcat。当我发布新版本时,我只是在没有配置的情况下发布战争,在部署时它将使用特定于客户端的配置。
通过文档,最好的地方是context.xml但是如果每次都覆盖它根本就没用。 (如果必须创建新的可交付成果,我为什么要使用JNDI和这样的东西呢?在构建时改变一些东西并不是一个很大的配置优势。)
环境:windows,tomcat 6.0.33
答案 0 :(得分:6)
我遇到了同样的问题,文档至少是不充分的,如果不是直接误导的话。
问题是,如果将已部署的WAR文件的新版本复制到webapps目录,Tomcat将不会重新部署现有应用程序,而是取消部署旧应用程序,然后部署新应用程序。差异可能首先看起来微不足道,但问题是在取消部署旧应用程序时,conf / Catalina / localhost中的任何上下文文件也会被删除。然后,在部署新应用程序期间,当前WAR文件中的新上下文文件将被复制到conf / Catalina / localhost。
我发现唯一可行的解决方案是不将新应用程序部署为WAR文件,而是替换或覆盖扩展目录,例如:不要将aaa.war复制到webapps /,而是将aaa.war直接解压缩到webapps / aaa /.