IntelliJ 15,SpringBoot devtools livereload 不工作
Posted
技术标签:
【中文标题】IntelliJ 15,SpringBoot devtools livereload 不工作【英文标题】:IntelliJ 15, SpringBoot devtools livereload not working 【发布时间】:2016-02-25 11:23:18 【问题描述】:Spring Boot devtools 1.3 的新 LiveReload 功能存在问题。它不会在类更改时重新加载。我已经在 IntelliJ @ Devoxx 2015 上看到过它的演示。我需要启用一些 IDE 设置吗?我通过 IDE 运行,而不是通过 Gradle。我尝试启用“自动制作项目”,但这似乎没有帮助。
它似乎加载正确并且正在寻找正确的路径
2015-11-23 05:55:30.592 DEBUG 4700 --- [ restartedMain] o.s.boot.devtools.restart.Restarter : Starting application com.myapp.Application with URLs [file:/E:/Projects/myapp/build/classes/main/, file:/E:/Projects/myapp/build/resources/main/]
我的文件
build.gradle
buildscript
ext
springBootVersion = '1.3.0.RELEASE'
repositories
mavenCentral()
dependencies
classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'war'
war
baseName = 'myapp'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories
mavenCentral()
maven url "https://repo.spring.io/snapshot"
maven url "https://repo.spring.io/milestone"
configurations
providedRuntime
dependencies
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-devtools')
compile('org.springframework.boot:spring-boot-starter-jdbc')
compile('org.projectlombok:lombok')
compile('org.springframework.boot:spring-boot-starter-web')
compile('net.sourceforge.jtds:jtds:1.3.1');
testCompile('org.springframework.boot:spring-boot-starter-test')
dependencyManagement
imports
mavenBom "org.springframework.cloud:spring-cloud-starter-parent:Brixton.M3"
eclipse
classpath
containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
task wrapper(type: Wrapper)
gradleVersion = '2.7'
HelloWorldController
@Controller
public class HelloWorldController
@RequestMapping("/")
@ResponseBody
String home()
return "Hello World test";
【问题讨论】:
答案要点:此功能会在 target/ 文件夹中的 .class 文件更改时重新启动服务器,而不是在您仅更改源 .java 文件时重新启动服务器。当您保存更改的源代码文件时,有一种方法可以强制 intellij 更新类路径上的 .class 文件。但是,此功能旨在与自动执行此操作的 eclipse ide 一起使用。 对我来说,我在 STS 中更新 [检查自动构建] 转到 windows -> 首选项 -> 构建 我发现了一个奇怪的变化;使用 Firefox 版本的插件,livereload 对某些页面来说就像一个魅力,但对其他页面则不然。切换到 Chrome,它适用于所有页面。可能是 Firefox 扩展中的错误? 【参考方案1】:要解决这个问题,你可以这样做:
-
在浏览器中添加 LiveReload 扩展。
将 devtools 依赖项添加到您的 pom.xml(如果它是 maven (spring-boot-devtools))。
在您的 intellij IDEA 中转到:文件->设置->构建、执行、部署。转到->编译器->自动构建项目。
在您的 intellij IDEA 中:SHIFT+Ctrl+A ->registry-> compiler.automake.allow.when.app.running
【讨论】:
【参考方案2】:如果您使用 IntelliJ IDEA,添加 spring-boot-devtools
是不够的。这是因为与 Eclipse 不同,您需要明确告诉 IntelliJ IDEA“制作项目”,以便将其构建到目标类路径。
see on youtube
最简单的解决方案:运行应用调试模式并按下Ctrl + f9
(构建快捷方式)
或
-
您需要启用“自动生成项目”选项。你可以
在设置 - 构建、执行、部署 - 编译器中找到它
要打开注册表,按 Ctrl-Alt-Shift-/ 并从出现的菜单中选择“注册表”,启用“compiler.automake.allow.when.app.running”
复选框。
【讨论】:
【参考方案3】:我猜您正在编码并期望 DevTools 自动神奇地发现您在项目中更改了某些内容? Devtools 通过观察你的类路径文件夹来做到这一点。当 .class
文件(或资源)发生更改时,devtools 会采取适当的措施。
如果您没有看到任何内容,那可能是因为您只是在编写代码而不是更新类路径。您必须调用 Make Project 来更新类路径。见the documentation
【讨论】:
试图理解以下“Intellij 用户将需要移除器才能使用 Build → Make Project 操作来获得相同的结果。”也许这是说“记住”而不是“卸妆”?你们是否设置了宏或其他东西来自动制作您的项目? IntelliJ 仅在应用程序未运行时才支持此功能...我看到其他人需要创建宏并将其绑定到“CTRL+S”操作。 got fixed on master already 是一个错字。 Make Project 只是一种捷径。如果您觉得“CTRL-S”更适合您,请执行此操作。但它本质上是完全一样的。我真的不买“自动制作”的方法,但那可能只是我自己。 好的,但是静态资产呢。为什么我需要为他们调用 Build? @Kaspar - 谢谢你提出这个问题。我必须手动调用构建才能查看静态 html 文件的更改。对我来说,这不是一个很好的工作流程。 我同意。在这个问题中:***.com/questions/34104664/… 我提到当我将静态资产移出资源文件夹时,问题实际上已得到解决。你也可以试试。【参考方案4】:LiveReload 和重启是不同的功能。 Livereload 允许您检测resources/static
文件夹中的更改,并通知浏览器文件已更改并应重新加载页面。
您的问题描述了重启场景。如果您希望您的应用程序在 *.class-files 更改时自动重新加载,请确保您的 IDE 将编译后的类输出到:
build\classes\main
在 Intellij 中转到 Project Structure (Ctrl+Alt+Shift+S) 并设置项目编译器输出目录。在此之后,您可以在类中进行更改并按 Ctrl+Shift+F9 重新编译当前类或按 Ctrl+F9 重新编译整个项目。 Spring Boot Devtools 会检测到build\classes\main
的变化并自动重启你的应用程序。
如果您想为静态资产启用 LiveReload,请添加以下内容(否则在执行 bootRun 目标时您不会看到静态内容的变化):
bootRun
addResources = true
【讨论】:
此时 bootRun 配置已更改为sourceResources sourceSets.main
:docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/…【参考方案5】:
在 IntelliJ 2021.2 compiler.automake.allow.when.app.running 选项消失。此选项已移至高级设置:
【讨论】:
这解决了我的问题【参考方案6】:按照以下简单步骤,您将在 2 分钟内启动并运行。
-
按 Ctrl+Shift+A
搜索注册表...
滚动并找到“compiler.automake.allow.when.app.running”,然后选中复选框以使其处于活动状态。
点击关闭
文件菜单 -> 设置 ...
扩展构建、执行、部署
选择编译器
选中复选框自动构建项目
申请
点击确定
现在停止您的应用程序服务器,然后启动您的应用程序,这样您就会发现在项目中检测到任何更改时自动重启/重新加载已激活。
快乐的编码/黑客。
【讨论】:
【参考方案7】:实时重新加载是与您要求解决方案的问题不同的功能。 在您的情况下,如果您想在更改类后重新加载类,则需要遵循以下 3 个步骤-
-
更改编译器设置
在注册表中进行更改
在运行/调试配置中进行更改
就是这样! 修改类后,您只需按 ctrl+F10 即可重新加载修改后的类。那你可以走了!
另外,如果你想在修改时配置单点重载:https://www.logicbig.com/tutorials/spring-framework/spring-boot/trigger-file.html
对于实时重新加载: 当 Spring Boot 应用程序在 Intellij IDEA 中运行时,模板从 out/production/resources/templates 目录提供。您可以更改此行为并在开发模式下直接从 src/main/resources/templates 目录提供模板。在 src/main/resources 目录下创建一个文件 application-dev.yml 并在其中粘贴以下代码 sn -p:
spring:
# Templates reloading during development
thymeleaf:
prefix: file:src/main/resources/templates/
cache: false
# Static resources reloading during development
resources:
static-locations: file:src/main/resources/static/
cache-period: 0
要加载上述属性,您需要激活并将默认的 Spring Boot 配置文件设置为 dev。将以下属性添加到您的 application.yml 文件中:
spring:
profiles:
active: dev
启动您的应用程序。现在,每当您对 html 文件进行任何更改时,您只需刷新浏览器即可查看更改!
【讨论】:
【参考方案8】:来自文档here
由于 DevTools 监控类路径资源,触发重启的唯一方法是更新类路径。更新类路径的方式取决于您使用的 IDE。在 Eclipse 中,保存修改过的文件将导致类路径更新并触发重新启动。在 IntelliJ IDEA 中,构建项目(Build → Make Project)会有同样的效果。
【讨论】:
【参考方案9】:要回答上述问题,让我们首先了解 Intellij Idea 中的一个功能。您一定已经看到您所做更改的文件不需要保存。并且您在任何非 .class 文件中所做的更改仍然保存。要交叉验证,请对 .java 文件进行一些更改(您也可以选择任何其他文件)并关闭它,它不会提示保存它,当您重新打开文件时,您的更改仍然存在。 但是,如果您检查 .class 文件,所做的更改不会反映出来,这很明显,因为构建还没有发生。 相反,当我们在 Eclipse 中启用自动构建时,它是在一个事件上完成的,该事件是保存文件 -> Ctrl+S(Windows)。但是在 intellij 想法中,事件没有发生,或者我们不执行该事件。 因此,考虑当我们没有 spring-boot-devtool 的情况,在这种情况下,我们总是不得不重建或重新启动服务器以获取更改,从而导致事件。 现在,关于 spring-boot-devtool 作为 Ankush92 正确地提到了 devtool 监视类路径的变化,并且只有在类路径中有任何变化时才会重新启动。 但正如我之前解释的那样,我们只是在非 .class 文件中添加我们的代码更改,并期望 devtool 触发重新启动,即使该更改未反映在类路径中。 让我再次提到这一点,在 Eclipse 中执行相同操作的事件是在启用自动构建时保存文件(Ctrl+S)。 所以,现在的问题是如何找到一种解决方法并将 Ctrl+S 在 Eclipse 中的作用模拟到 Intellij Idea 中。构建应用程序非常简单,快捷键是 Ctrl+F9。这将在 intellij 中触发与 Eclipse 中的 Ctrl+S(在这种情况下)相同的效果,并帮助 devtool 找到类路径中的更改,从而鼓励它重新启动服务器。因此,每次您对文件进行任何更改并希望服务器重新启动时,只需按 Ctr+F9。 我希望这个解释和解决方法有所帮助。
【讨论】:
【参考方案10】:Edit - Macros - Start Macro Recording
File - Save All
Build - Build Project
Edit - Macros - Stop Macro Recording - You can save the macro name as “Save & Make Project”
Preferences - Keymap - Macros
向下展开宏目录以找到您的新宏(即“保存并制作项目”)。 双击添加键盘快捷键,如果使用 Mac,请按 Cmd+S,如果使用 Windows,请按 Ctrl+S。
Intellij 会提示说 Ctrl+S 已经存在,只需点击“替换”即可。
现在一切就绪,Ctrl+S 应该会触发 Spring-Boot Devtools
参考:https://tomyjaya.github.io/2016/10/08/spring-boot-dev-tools-in-intellij/
【讨论】:
【参考方案11】:intellij 2021.2 已将此选项移至 AdvancedSettings:
【讨论】:
这是最新版 IntelliJ 的正确答案。这是唯一对我有用的解决方案。谢谢@Leonardo Moura【参考方案12】:我发现 IntelliJ 甚至没有使用我的 Gradle 配置。
访问Build, Execution, Deployment > Build Tools > Gradle
然后在Delegate Settings
下我选择了Build and Run Using
并使其成为Gradle
。
像魅力一样工作
作为参考,这是我的构建配置:
plugins
id 'org.springframework.boot' version '2.1.6.RELEASE'
id 'java'
id 'idea'
apply plugin: 'io.spring.dependency-management'
group = 'test'
version = '0.0.1'
sourceCompatibility = '1.8'
repositories
mavenCentral()
configurations
developmentOnly
runtimeClasspath
extendsFrom developmentOnly
dependencies
implementation 'org.springframework.boot:spring-boot-starter-web'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
这很好而不是:
bootRun
addResources = true // Did not work for me
【讨论】:
我只是使用小“绿色锤子”构建所有按钮来触发重启。适合我。【参考方案13】:在 IntelliJ IDEA 2021.2 中,compiler.automake.allow.when.app.running
选项消失了。
所以按照这些步骤,
-
文件⇒设置⇒构建、执行、部署⇒编译器⇒自动构建项目
高级设置⇒ 即使开发的应用程序当前正在运行,也允许自动启动
将此行添加到 application.properties 文件⇒
spring.devtools.restart.enabled=true
【讨论】:
【参考方案14】:应用以下步骤:
在您的浏览器中添加 LiveReload 扩展。 链接: https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei
将 devtools 依赖项添加到您的 pom.xml(对于 maven)或 build.gradle(对于 gradle)
对于 Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
毕业典礼
compileOnly("org.springframework.boot:spring-boot-devtools")
文件->设置->构建、执行、部署。转到->编译器->自动构建项目。
Ctrl+Shift+A ->registry-> compiler.automake.allow.when.app.running
Ctrl+Shift+A ->编辑配置->Spring Boot->你的应用程序->
【讨论】:
【参考方案15】:我正在使用 IntelliJ IDEA 2021.2.2(终极版)。
我遵循了这些步骤,
File -> Settings -> Build, Execution, Deployment-> Compiler add tick to Build project automatically 复选框
接下来,
按Ctrl+Shift+A
搜索注册表...
滚动并找到“compiler.automake.allow.when.app.running
”然后我找不到。
然后我研究发现在 IntelliJ 2021.2 compiler.automake.allow.when.app.running 选项消失了。此选项已移至高级设置:
高级设置
【讨论】:
【参考方案16】:1- 将 Spring Boot devtools 依赖项添加到您的 maven pom.xml
文件中。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>your-desired-version</version>
</dependency>
2- 重启项目。
3- 更改除方法签名、参数或类似内容之外的一些 java 代码。例如,更改简单的代码行或更改字符串文字。
4- 不用重启项目,而是使用 Ctrt+shift+f9.
5- 在浏览器上享受结果。
【讨论】:
谢谢你:)。这种解决方法适用于 intellij。我知道这个功能是为 eclipse 而不是 intellij 的。【参考方案17】:上个月我在 MAC 上经常遇到这个问题。即使遵循此处列出的这些步骤,例如检查“自动生成项目”和“编译器自动生成”。
但是在我使用 Windows 的工作中,当我按照这些步骤操作时,它可以完美运行。
MAC 上这个问题的解决方案我发现是添加一个新的运行配置(按 ⌃⌥R,然后按 0),然后添加一个新的 Maven 配置。在“命令行”输入设置“spring-boot:run”。按“应用”和“确定”并通过选择创建的新配置来运行项目。
当然你也可以打开一个新的终端,输入“mvn spring-boot:run”,它也可以工作。
【讨论】:
【参考方案18】:这对我有用。在 application.properties 文件中添加以下行,
spring.devtools.restart.enabled=true
【讨论】:
【参考方案19】:如果 LiveReload 过去对您有用,然后突然停止工作,并且如果其他建议的解决方案不起作用,请尝试卸载并重新安装 LiveReload 浏览器插件。这就是最终为我解决的问题。
【讨论】:
【参考方案20】:完成以上所有设置后,您应该重新编译要重新加载的html文件! 构建 → 重新编译“yourHtmlFile.html”(在 Windows 中为 Ctrl+Shift+F9)
【讨论】:
【参考方案21】:文件->设置->构建、执行、部署->编译器
为Build project automatically
复选框添加勾选
Ctrl+ Shift+alt++ -> 选择注册表
给compiler.automate.allow.when.app.running
添加打勾
【讨论】:
【参考方案22】:IntelliJ IDEA > 首选项 > 工具 > 高级设置 > 编译器 > 选中该框以允许自动制作启动,即使开发的应用程序当前正在运行。
在相应的 pom.xml 上添加以下依赖项。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
在服务器运行时进行您想要进行的更改。
构建 > 构建项目
重新加载浏览器
【讨论】:
【参考方案23】:如果它是 Maven 并且您想要开发工具,那么检查您的 pom.xml 中的依赖项是否已由 Intelli J 正确导入。 就我而言,它显示为红色,因此我进行了 Maven 刷新,并在遵循其他 cmets 的其他 Registry 建议后解决了我的问题。
【讨论】:
以上是关于IntelliJ 15,SpringBoot devtools livereload 不工作的主要内容,如果未能解决你的问题,请参考以下文章
当 spring-boot 运行时 IntelliJ 进程以退出代码 0 完成
Eclipse & Intellij DE - 无法连接到 mysql 数据库