无法使用 tomcat 9 在 Intellij 中热交换 html 文件

unable to hotswap html file in Intellij with tomcat 9

我是 IntelliJ 的新手,我创建了一个 运行 配置来调试我的 使用 intellij 的 Web 应用程序。

我做的是:

  1. 运行 我的应用程序在 intellij 调试模式下,看到服务器成功启动,html 文件正确呈现。
    1. 修改了一个 java 文件。
    2. 修改了一个 html 文件。
    3. 救了他们。
    4. 点击 intellij 之外的某处 window 触发热交换。
    5. 我看到消息弹出,说只更新了 1 个文件(是 java 文件)。

我发现的问题是:

  1. html 从未更新过。

我注意到的是:

  1. java 文件已重新编译,"hotswapped" 成功。
    1. html 文件不是 "hotswapped":
      • 浏览器中的页面没有反映我所做的更改。
      • html在浏览器中手动刷新网页也没有更新
      • 如果我在 IntelliJ 中只修改 html 文件,弹出总是会说 "loaded classes are up to date. Nothing to upload".
    2. 但我验证了 html 源已成功更改,部署到展开的 war 目录的 html 文件也已成功更改。
    3. 当我单击 "redeploy" 按钮时,我可以看到 html 得到更新。
    4. 我也试过将 cachingAllowed="false" 添加到 tomcat context.xml 文件,但没有成功。

我的问题是:

  1. 如何使用 tomcat9 在 IntelliJ 中启用热交换? (我错过了什么吗?)
    1. "hotswap"和"redeploy"有什么区别?

谢谢。

IntelliJ 版本: 终极版 2018.1

Tomcat版本: 阿帕奇-tomcat-9.0.7

  • 回答

我在这里找到了答案: https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000004090-Updating-HTML-and-Resources-without-restarting-application-server-Tomcat-8-Thymeleaf-3-Sparkjava-?page=1#community_comment_360000203964

  • 原因 正如 Ulisses Silva 指出的那样:Thymeleaf 的 TemplateResolver 实现有一个 "cacheable" 属性,其中 "true" 作为默认属性。

  • 解决方案

将 "cacheable" 属性设置为 false,如下所示到您的 TemplateResolver 定义:

<property name="cacheable" value="false" />