如何使用maven-tomcat7-plugin在Tomcat上正确地热部署/重新部署war



我知道有很多线程在谈论它,但我暴露了一个在他们的帮助下无法解决的情况。我希望我的问题,如果将来得到解决,我可以帮助更多像我这样的人。

我正试图在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结果

部署似乎工作正常,但当我进入应用程序时,会出现以下错误:

找不到此页面(localhost(找不到该地址的网页http://localhost:8081/MY_PATH/#/PATH.HTTP错误404

情况2

从项目文件夹和apache-tomcat-7.0.91\conf\context.xml执行的与案例1相同的命令,但没有防抱死属性:

<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错误?

根据Tomcat:,不应该同时使用antiResourceLockingantiJARLocking功能

antiJARLocking是antiResourceLocking的一个子集,因此,为了防止重复工作和可能的问题,在任何时候都只应将其中一个属性设置为true。

还有关于使用antiResourceLocking 的特定警告

请注意,将其设置为true会产生一些副作用,包括禁用正在运行的服务器中的JSP重载:请参阅Bugzilla 37668。

请注意,在主机的appBase(默认情况下为webapps目录(之外的应用程序中,将此标志设置为true将导致应用程序在Tomcat关闭时被删除。您可能不想这样做,所以在将antiResourceLocking=true设置在其主机的appBase之外的网络应用程序上之前,请三思。

最新更新