【问题标题】:How to properly hot deploy/redeploy war on Tomcat with maven-tomcat7-plugin?如何使用 maven-tomcat7-plugin 在 Tomcat 上正确热部署/重新部署战争?
【发布时间】:2019-04-10 16:12:38
【问题描述】:

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

我正在尝试在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

从项目文件夹和没有防锁定属性的 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错误?

【问题讨论】:

    标签: java maven tomcat7 tomcat7-maven-plugin


    【解决方案1】:

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

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

    还有关于使用antiResourceLocking的具体警告

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 2013-12-03
      相关资源
      最近更新 更多