在启动时覆盖Tomcat默认值

在启动时覆盖Tomcat默认值,tomcat,configuration,Tomcat,Configuration,我目前将我的Ant构建配置为有一个部署本地目标,该目标创建我的web应用程序的WAR,然后简单地将WAR文件复制到本地Tomcat的webapps/目录 问题是,每次我运行Tomcat时,它都会首先将其webapps/目录中的所有war解压到文件夹中,因此MyWebApp.war会在Tomcat完成启动之前解压到一个名为MyWebApp/的目录中 很明显,Tomcat随后是在复制的目录之外部署的,而不是我的WAR。我已经证明了这一点,停止Tomcat,删除WAR,但保留复制的目录,然后重新启动T

我目前将我的Ant构建配置为有一个部署本地目标,该目标创建我的web应用程序的WAR,然后简单地将WAR文件复制到本地Tomcat的webapps/目录

问题是,每次我运行Tomcat时,它都会首先将其webapps/目录中的所有war解压到文件夹中,因此MyWebApp.war会在Tomcat完成启动之前解压到一个名为MyWebApp/的目录中

很明显,Tomcat随后是在复制的目录之外部署的,而不是我的WAR。我已经证明了这一点,停止Tomcat,删除WAR,但保留复制的目录,然后重新启动Tomcat…它工作了

这里最大的痛苦是,每次我调整我的项目并运行deploy local来测试它们时,我必须首先手动删除webapps中复制的目录,否则Tomcat将忽略从Ant复制的新WAR文件,而只是从旧的复制目录中部署

这已经变得非常烦人了!我已经和我的技术负责人谈过这个问题,他似乎没有同样的问题,我们都在使用Tomcat7.0.19。此外,我们在Dev、QA和Production中运行的Tomcat实例也不会受到这种影响。这告诉我这是我这边的一个配置问题


请告知!!!提前谢谢你

您可以使用ant删除目录,并允许Tomcat通过将其放入build.xml中自动部署新的webapp:

<target name="deploy" depends="war" description="Deployment target.">
    <delete dir="${tomcat.home.dir}/webapps/MYWEBAPP"/>
    <delete file="${tomcat.home.dir}/webapps/MYWEBAPP.war"/>
    <copy file="${build.dir}/MYWEBAPP.war" todir="${tomcat.home.dir}/webapps"/>
</target>
在这种情况下运行ant deploy就可以做到这一点

或者,从Eclipse内部运行Tomcat和您的webapp,它提供了不发布模块的选项,这意味着Eclipse项目直接运行,甚至不需要构建WAR


我不知道有什么方法可以让Tomcat在不提取的情况下运行一场战争。

我也有同样的问题,因为我检查了Tomcat的源代码,然后发现它确实有这个bug。官方文件说,tomcat将检查与direcoty相关的最新战争,但实际上它不起作用。