Spring Boot devtools - 静态内容重新加载在 IntelliJ 中不起作用

Posted

技术标签:

【中文标题】Spring Boot devtools - 静态内容重新加载在 IntelliJ 中不起作用【英文标题】:Spring boot devtools - Static content reloading does not work in IntelliJ 【发布时间】:2016-06-24 01:43:51 【问题描述】:

在构建我的第一个 Spring Boot 应用程序时,我发现每次更改 /resources/static/some-file.js 中的 javascript 文件时都需要重新启动应用程序

这非常耗时。

当我将文件移动到 /webapps/ 文件夹时,它按预期工作,但文件未打包在 JAR 中。文档提到了这一点,所以我不能继续这样下去。

我阅读了有关 spring-boot-devtools 的所有信息,并将其安装在我的 POM 中,但热交换无法正常工作。我仍然需要重新启动整个应用程序才能看到 Javascript 或 CSS 文件更改。

当应用程序启动时,我可以看到LiveReload server is running on port 35729 行,所以spring-boot-devtools 一定在做某事......

进一步调查出了什么问题的步骤是什么?

我的猜测是,当 IntelliJ 运行应用程序时,文件会被复制,所以当我进行更改时,我实际上是在更改原始文件,而不是正在运行的应用程序使用的文件。

PS:我将 Maven、IntelliJ IDEA 15 和 Spring Boot 1.3.3 与嵌入式 Tomcat 服务器一起使用。我不确定 IntelliJ 运行什么命令来启动应用程序。 IDE 正在“自动”处理这个问题。也许我需要更改我的运行配置?

【问题讨论】:

这是一个 Spring Boot 项目吗?在 Spring Boot 中,默认情况下 src/main/resources/templates 是视图所在的位置,而不是 webapps 文件夹。请发布 pom.xml 我的文件在正确的位置。当我注意到热交换不起作用时,我才尝试移动它们。在意识到无法保留“webapps”文件夹后,我将文件返回到原来的位置。 好视频如何在 IDEA 中工作:youtube.com/watch?v=VWF7vCJSqrA spring boot hotswap with Intellij IDE的可能重复 但是在这两个步骤之后,即使我没有编辑任何文件,ide 也正在编译。 【参考方案1】:

您需要在 IntelliJ 中打开一些功能才能完成这项工作。

首先,有一个项目特定的设置,您需要将其应用于您想在其中使用 devtools 的任何项目。转到 Preferences > Compiler 并启用“Make project automatically”。

下一个设置是适用于所有项目的 IDEA 注册表设置。

在 macOS (OSX) 中,按 Shift+Command+A(在 Windows 中为 Shift+Ctrl+A) 在出现的搜索框中输入“注册表”,然后选择注册表将其打开。 查找 compiler.automake.allow.when.app.running 并启用它。

之后,重新启动您的应用。您会注意到项目会随着您所做的每一次更改而不断重建。当您在浏览器中查看结果时,您会看到静态文件和代码都已更新。

【讨论】:

在 Windows 上:按 Ctrl-Alt-Shift-/ 并从出现的菜单中选择“注册表”。 相当不错。对我来说,最终的解决方案是网络服务器重启只在我保存源文件时发生,而不是自动发生。对此进行调查。 对于当前版本的 IntelliJ 是:Ctrl+Shift+A 并写Registry 遗憾的是,如果您使用 webpack 并观看,这将不起作用。在这种情况下,您必须始终进入 bundle.js 文件并手动编辑它(即通过在某处添加空格)... 我没有在注册表中看到 compiler.automake.allow.when.app.running。我正在使用 intellij 社区版 2018.1。请帮忙【参考方案2】:

对于 Windows 用户,步骤如下: 1) 转到文件->设置,然后转到“构建、执行、部署”->编译器并启用“自动生成项目”标志。 2) 按 Ctrl-Alt-Shift-/ 并从出现的菜单中选择“注册表”。启用 compiler.automake.allow.when.app.running 标志。 3)启动/重新启动应用程序并观察静态内容重新加载。

【讨论】:

我认为它已重命名为“自动构建项目”。我终于按照这里的说明解决了这个问题:***.com/questions/40057057/…【参考方案3】:

对于IntelliJ 2021.2 或更高版本,以下是您需要遵循的步骤

    添加 spring-boot-devtools 依赖项(如果尚未添加)。

    启用自动构建项目如下图

    高级设置中启用选项如下所示

【讨论】:

这似乎不适用于 application.properites 更改。这个解决方案是否也适用于静态文件?【参考方案4】:

在 Linux 上,按:

Ctrl-Alt-Shift-/

【讨论】:

【参考方案5】:

对于 mac 用户,我必须按 Command + Shift + A

并在 Step1 和 Step2 之后重新启动 INTELLIJ,否则注册表选项不会出现。

【讨论】:

【参考方案6】:

您可以像下面这样使用:

    首先 打开 Preferences.../Settings... -> Build, Execution, Deployment -> Compiler 并允许自动构建项目。图片看起来像

    第二,我们更改注册表配置。对于 ma​​cOS,请按 command+shift+A,或者如果您使用的是 Windows,请按 Ctrl+Shift+A,然后搜索注册表。 启用 compiler.automake.allow.when.app.running。图片如下所示

注册表图像看起来像..

compiler.automake.allow.when.app.running 启用图片的样子

然后享受..

【讨论】:

【参考方案7】:

该选项现在位于高级设置中:

【讨论】:

这似乎是 this other 答案的副本,但信息较少

以上是关于Spring Boot devtools - 静态内容重新加载在 IntelliJ 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 2.0 热部署指南

spring-boot-devtools 实现热部署

Spring Boot(20)——devtools介绍

spring-boot 速成 devtools之热部署

DevTools in Spring Boot 1.3

spring-boot-devtools热部署