Tomcat更新了context.xml但不应该

tak*_*sot 5 java tomcat jndi context.xml

Tomcat文档(http://tomcat.apache.org/tomcat-6.0-doc/config/context.html)

仅当$ CATALINA_BASE/conf/[enginename]/[hostname] /中的应用程序不存在上下文文件时,才在应用程序文件内的/META-INF/context.xml中的单个文件中.如果Web应用程序打包为WAR,则/META-INF/context.xml将复制到$ CATALINA_BASE/conf/[enginename]/[hostname] /并重命名以匹配应用程序的上下文路径.一旦此文件存在,如果在主机的appBase中放置了带有较新的/META-INF/context.xml的新WAR,则不会替换它.

粗体文字很清楚.但我通知不是真的.(我需要这个行为)

以下是步骤:

  1. 带有context.xml的aaa.war包含在META-INF中
  2. 复制到webapps.tomcat部署.文件conf\Catalina\localhost\aaa.xml确定
  3. 通过更改META-INF/context.xml来更改aaa.war
  4. 复制到webapps
  5. 文件conf\Catalina\localhost\aaa.xml已更改!!!

怎么了?它是一个错误还是一个隐藏的功能?

背景 - 我想解决的问题:

配置独立构建和安装.我厂运送战争档案.客户端使用自己的设置来配置他的Tomcat.当我发布新版本时,我只是在没有配置的情况下交付战争,在部署时它将使用客户端特定的配置.

通过文档,最好的地方是context.xml但是如果每次都覆盖它根本就没用.(如果必须创建新的可交付成果,为什么我会使用JNDI和这样的东西?在构建时改变一些东西并不是一个很大的配置优势.)

环境:windows,tomcat 6.0.33

jar*_*bjo 6

我遇到了同样的问题,文档至少是不充分的,如果不是直接误导的话.

问题是,如果将已部署的WAR文件的新版本复制到webapps目录,Tomcat将不会重新部署现有应用程序,而是取消部署旧应用程序,然后部署新应用程序.差异可能首先看起来微不足道,但问题是在取消部署旧应用程序时,conf/Catalina/localhost中的任何上下文文件也会被删除.然后,在部署新应用程序期间,当前WAR文件中的新上下文文件将被复制到conf/Catalina/localhost.

我发现唯一可行的解​​决方案是不将新应用程序部署为WAR文件,而是替换或覆盖扩展目录,例如不将aaa.war复制到webapps /,而是将aaa.war直接解压缩到webapps/aaa /.