如何在 tomcat 中启用热部署

how to enable hot deploy in tomcat

我可以编写一个 ant 脚本,将更新的 class 文件复制到 tomcat 中的 web-inf\classes。但是我如何告诉 Tomcat 7.0 自动从 web-inf/classes 目录中获取更改的 class 文件?

我尝试在 tomcat 主机配置 server.xml 中设置 autoDeploy="true",但是当检测到更改时,Tomcat 会话被破坏。 我可以在 Intellij

中轻松替代 eclipse tomcat plugin

Tomcat只能热插拔某些类型的文件如JSP, and static files like JavaScript, CSS, etc. if you turn off cacheing不能热插拔Java类,只能重启webapp。实现热插拔Java类,我到处都看到JRebel的广告,但没试过他们的产品

但是,您可以通过注释掉指令来保留 Tomcat 会话,如 Tomcat 文档站点中所述:http://tomcat.apache.org/tomcat-7.0-doc/config/manager.html#Disable_Session_Persistence.

最后,您可以将 ANT 脚本写入 assemble WAR 并在每次执行脚本时重新部署。

示例build.xml:

...
<target name="tomcat-stop">
    <exec executable="${server.home}/bin/catalina.bat">
        <arg value="stop"/>
    </exec>
</target>

<target name="tomcat-start">
    <exec executable="${server.home}/bin/startup.bat">
        <arg value="start"/>
    </exec>
</target>
...
<target name="all" depends="tomcat-stop,clean,init,compile,junit-slow,make_war,deploy,tomcat-start"></target>

在任何合并中,出于两个原因,我会避免使用 Eclipse Tomcat 插件。

  1. 在大多数版本的 Eclipse 中已经包含 Tomcat 作为服务器适配器并带有一些选项。
  2. 防止 IDE 因插件而膨胀。

我最终使用了 HotSwapAgent tool。这是 JRebel

的免费替代品

显然,另一种选择是使用 jetty(例如,在进行开发时)它能够更轻松地进行动态热插拔。

有一个新的支持它的intellij插件:https://plugins.jetbrains.com/plugin/9492-smart-tomcat