我知道有很多人在谈论它,但是我暴露出一种情况,我无法在他们的帮助下解决。我希望我的问题以及将来的解决方案能够在我所处的环境中帮助更多的人。
我正在尝试在Tomcat中进行战争的热部署,并且发现自己遇到以下四种情况:
案例1
从项目文件夹执行的部署命令:
mvn clean install org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy -P PROFILE_ONE,PROFILE_TWO -Dmaven.skip.test=true -DskipTests=true -Dmaven.javadoc.skip=true -Dsource.skip=true -Dproject.build.sourceEncoding=UTF-8 -Dcobertura.skip=true -Dmaven.skip.test=true -DskipTests=true -Dmaven.javadoc.skip=true -Dsource.skip=true -Dproject.reporting.outputEncoding=UTF-8 -Dmaven.tomcat.path=/MY_PATH -Dmaven.tomcat.url=http://localhost:8081/manager/text -Dmaven.tomcat.server=TomcatServer -Dtomcat.password=TOMCAT_USER -Dtomcat.username=TOMCAT_PASSWORD
AND apache-tomcat-7.0.91 \ conf \ context.xml具有以下属性:
<Context antiResourceLocking="true" antiJARLocking="true">
案例1结果
部署似乎工作正常,但是当我进入应用程序时,出现以下错误:
找不到此页面(本地主机) 找不到网址http://localhost:8081/MY_PATH/#/PATH的网页。 HTTP错误404
案例2
情况1的相同命令是从项目文件夹和apache-tomcat-7.0.91 \ conf \ context.xml执行的,没有防锁定属性:
<Context>
案例2结果
部署和应用程序可以正常工作,但是当我尝试重新部署时,使用相同的命令并添加属性-Dmaven.tomcat.update=true
不能正常工作,因为有几个jar被阻止,并且tomcat无法删除它们。 (这就是为什么我在其他情况下添加防锁定属性的原因)
案例3
从项目文件夹和apache-tomcat-7.0.91 \ conf \ context.xml中执行的情况1的相同命令具有以下属性:
<Context antiJARLocking="true">
案例3结果
等于情况2的结果。
案例4
从项目文件夹和apache-tomcat-7.0.91 \ conf \ context.xml中执行的情况1的相同命令具有以下属性:
<Context antiResourceLocking="true">
案例4结果
等于情况1的结果。
案件结束
如您所见,我的目标是首先进行部署,然后重新部署相同的应用程序(在项目文件夹中进行更改)。我找到的所有信息都在讨论防锁定属性,但是正如我上面所说,当我将它们放在context.xml上时,该应用程序似乎无法正常工作。重要的是要说,由于项目的需要,我无法更改战争的名称。
编辑1
案例5
我还尝试了以下命令:
mvn clean install -U -P PROFILE_ONE,PROFILE_TWO -Dmaven.skip.test=true -DskipTests=true -Dmaven.javadoc.skip=true -Dsource.skip=true -Dproject.build.sourceEncoding=UTF-8 -Dcobertura.skip=true -Dmaven.skip.test=true -DskipTests=true -Dmaven.javadoc.skip=true -Dsource.skip=true -Dproject.reporting.outputEncoding=UTF-8 org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:redeploy-only -Dmaven.tomcat.path=/MY_PATH -Dmaven.tomcat.url=http://localhost:8081/manager/text -Dmaven.tomcat.server=TomcatServer -Dtomcat.password=admin -Dtomcat.username=admin
以及具有以下属性的apache-tomcat-7.0.91 \ conf \ context.xml:
<Context antiResourceLocking="true">
案例5结果KO
等于情况1的结果。
为什么antiResourceLocking="true"
导致结果1错误?
答案 0 :(得分:0)
根据Tomcat,您不应该同时使用antiResourceLocking
和antiJARLocking
功能:
antiJARLocking是antiResourceLocking的子集,因此,为防止重复工作和可能出现的问题,任何时候都应仅将这些属性之一设置为true。
还有关于使用antiResourceLocking
的具体警告请注意,将其设置为true有一些副作用,包括在运行的服务器中禁用JSP重载:请参见Bugzilla 37668。
请注意,在主机的appBase之外的应用程序(默认为webapps目录)中将此标志设置为true会导致在Tomcat关闭时删除该应用程序。您可能不想这样做,因此在主机的appBase之外的Web应用程序上设置antiResourceLocking = true之前,请三思。