【问题标题】:Tomcat not autodeploying war fileTomcat没有自动部署war文件
【发布时间】:2011-06-04 00:15:16
【问题描述】:

我按照以下步骤操作

  • 关闭 Tomcat
  • 部署了一个时间戳为 12 月 1 日的 war 文件
  • 启动 Tomcat - 这为部署的战争文件创建了展开目录。
  • 停止 Tomcat
  • 使用时间戳为 12 月 3 日的新文件更新了 war 文件
  • 重启Tomcat

我发现当我重新启动Tomcat时,之前扩展的文件夹中的现有文件没有更新。对war文件的更新不应该更新了相关的jsp、class文件吗?

我查看了文档并找到了这个http://tomcat.apache.org/tomcat-5.5-doc/config/host.html。 “自动应用程序部署”下的以下引用

除了自动 启动时发生的部署 时间,你也可以要求新的 XML 配置文件,WAR 文件或子目录 放入 appBase(或
$CATALINA_HOME/conf/[engine_name]/[host_name] 在 XML 配置的情况下 文件)目录,而 Tomcat 是 运行将自动 部署,按照规则 如上所述。自动部署器 还将跟踪 Web 应用程序 以下更改:

  • 对 WEB-INF/web.xml 的更新 文件将触发重新加载网络 应用
  • 对 WAR 的更新 已扩展的将触发 取消部署(删除 扩展的 webapp),然后是 部署
  • 对 XML 的更新 配置文件将触发 取消部署(不删除任何 扩展目录),后跟一个 相关网络的部署 应用

是否应该根据上述第 2 点自动更新文件?

在 server.xml 中将 Autodeploy 设置为 true

【问题讨论】:

    标签: java tomcat jakarta-ee war


    【解决方案1】:

    当我使用 maven 在 ubuntu 框内的 tomcat 中生成构建时,我有一个名为

    的脚本

    install_wars.sh

    内容如下:

    mvn clean install
    service tomcat7 stop
    find /var/lib/tomcat7/webapps/ -mindepth 1 -maxdepth 1 -type d -exec rm -rf {} \;
    find . -name *.war -exec cp {} /var/lib/tomcat7/webapps/ \;
    service tomcat7 start
    

    您可能需要相应地更改路径和 maven 命令。

    tomcat 停止/启动是为了避免任何内存泄漏,从而在多次重新部署后使应用程序变慢。

    【讨论】:

      【解决方案2】:

      在我的例子中,我将其命名为 artifact

      ROOT.WAR
      

      但应该是

      ROOT.war
      

      干杯!

      【讨论】:

        【解决方案3】:

        添加自动部署 = true。为我工作

        <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        

        【讨论】:

        • 看起来像一个 XML 元素。这应该添加到什么文件中?
        • 在 tomcat conf 目录下编辑 server.xml 就可以了
        • 现在tomcat默认都有了
        【解决方案4】:

        我通常将 server.xml 中的自动部署设置为 false。这让我可以放弃新的战争并重新启动tomcat,而无需处理相应的目录。

        【讨论】:

          【解决方案5】:

          从历史上看,当你放入一个新的 jar 时,tomcat 从来没有更新过分解的目录,至少对我来说是这样。我一直认为这是一个错误,但从未调查过它,因为有一个简单的解决方案。这两个都应该可以正常工作:

        • 使用内置的 Manager 应用程序部署 war 文件。如果您可以使用 GUI 进行生产管理,那很好。 注意如果您多次部署此工具会出现问题(同样,我从未深入研究过细节),但 Tomcat 重启工作正常。
        • 停止、删除和删除。停止 Tomcat,删除分解后的目录,放入新的 war 文件。
        • 【讨论】:

          • +1 相同。我采用了第二种解决方案,只需编写一个脚本即可。
          • 我使用第二种方法,但没有删除展开的目录。那是不工作的位:0
          • Tomcat 用这一段解释了这一点:“应用程序库 (appBase) 目录中没有相应的同名目录(没有“.war”扩展名)的任何 Web 应用程序归档文件将自动展开,除非 unpackWARs 属性设置为 false。如果重新部署更新的 WAR 文件,请务必在重启 Tomcat 时删除展开的目录,这样更新的 WAR 文件会重新展开(注意自动部署器,如果启用,将在删除之前展开的目录后自动展开更新的 WAR 文件)。"
          • 问题是,当你在生产中时,重启应用服务器并不容易,特别是如果其他应用在该服务器实例下运行
          • 嗨,谁能告诉我Drop在这里是什么?
          【解决方案6】:

          是的,展开的目录应该被更新,但是你不需要停止 Tomcat 来让它工作——它会在 Tomcat 运行的情况下工作。您可以在更新之间不停止 Tomcat 的情况下再试一次吗?

          我还使用内置的管理器应用程序,它允许我在域中的任何位置更新战争文件,而无需成为 root(或 apache 或任何运行的 Tomcat)。这很方便,可以内置到 Ant 脚本中。

          【讨论】:

          • 我们没有在生产环境中安装管理器或管理应用程序,所以这一切都是通过脚本完成的。我同意应该更新分解的文件夹。我想知道我关闭tomcat的事实是否会导致这种情况。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-13
          • 2012-07-29
          • 2019-10-01
          • 1970-01-01
          • 2013-02-05
          • 2017-11-08
          相关资源
          最近更新 更多