IntelliJ 15,SpringBoot devtools livereload无法正常工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IntelliJ 15,SpringBoot devtools livereload无法正常工作相关的知识,希望对你有一定的参考价值。
使用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";
}
}
我猜你正在编码并希望DevTools自动神奇地弄清楚你在项目中改变了什么? Devtools通过观察你的classpath文件夹来做到这一点。当.class
文件(或资源)发生变化时,devtools采取适当的行动。
如果你没有看到任何东西,那可能是因为你只是编码而不是更新类路径。您必须调用Make Project来更新类路径。见the documentation
这对我有用。在application.properties文件中添加以下行,
spring.devtools.restart.enabled=true
要解决这个问题你可以这样做:
- 在浏览器中添加LiveReload扩展程序。
- 将devtools依赖项添加到您的pom.xml(如果它是maven(spring-boot-devtools))。
- 在您的intellij IDEA中,转到:file-> settings-> build,execution,deployment。自动转到 - > compiler-> build project。
- 在您的intellij IDEA中:SHIFT + Ctrl + A - > registry-> compiler.automake.allow.when.app.running
如果你使用IntelliJ IDEA,添加spring-boot-devtools
是不够的。这是因为与Eclipse不同,您需要明确告诉IntelliJ IDEA“Make The Project”以使其构建到目标类路径。
最简单的解决方案:运行app调试模式并按Ctrl + f9
(构建的快捷方式)
要么
- 您需要启用“自动生成项目”选项。您可以在“设置 - 构建,执行,部署 - 编译器”中找到它
- 要打开注册表,只需按SHIFT + CTRL + A.在注册表窗口中,启用“compiler.automake.allow.when.app.running”复选框。
LiveReload和重启是不同的功能。 Livereload允许您检测resources/static
文件夹中的更改,并通知浏览器文件已更改并应重新加载页面。
您的问题描述了重启场景。如果您希望应用程序在* .class-files更改时自动重新加载,请确保您的IDE将编译后的类转换为:
buildclassesmain
在Intellij中转到项目结构(Ctrl + Alt + Shift + S)并设置项目编译器输出目录。在此之后,您可以在类中进行更改,然后按Ctrl + Shift + F9重新编译当前类,或按Ctrl + F9重新编译整个项目。 Spring Boot Devtools将检测buildclassesmain
中的更改并自动重启您的应用程序。
如果要为静态资源启用LiveReload,请添加以下内容(否则在执行bootRun目标时不会看到静态内容的变化):
bootRun {
addResources = true
}
按照以下简单步骤,您将在不到2分钟内启动并运行。
- 按Ctrl + Shift + A.
- 搜索注册表...
- 滚动并找到“compiler.automake.allow.when.app.running”,然后选中复选框以使其处于活动状态。
- 点击关闭
- 文件菜单 - >设置...
- 展开构建,执行,部署
- 选择编译器
- 选择复选框自动构建项目
- 应用
- 单击确定
现在停止应用程序服务器,然后启动应用程序,即在项目中检测到任何更改时,您将发现自动重启/重新加载。
快乐的编码/黑客。
来自文档here
由于DevTools监视类路径资源,因此触发重新启动的唯一方法是更新类路径。导致更新类路径的方式取决于您使用的IDE。在Eclipse中,保存修改后的文件将导致更新类路径并触发重新启动。在IntelliJ IDEA中,构建项目(Build→Make Project)将具有相同的效果。
要回答上述问题,我们首先要了解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即可。我希望这个解释和解决方法有所帮助。
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,只需单击“替换”即可。
现在所有set和Ctrl + S都应该触发Spring-Boot Devtools
参考:https://tomyjaya.github.io/2016/10/08/spring-boot-dev-tools-in-intellij/
在过去的几个月里我一直在MAC上面对这个问题。即使遵循此处列出的这些步骤,例如选中“自动生成项目”和“编译器自动执行”。
然而,在我的Job,我们使用Windows的地方,当我按照这些步骤操作时,它可以很好地工作。
我发现MAC上的这个问题的解决方案是添加一个新的运行配置(按^⌥R,然后按0)然后添加一个新的Maven配置。在“命令行”输入设置“spring-boot:run”。按“应用”和“确定”,然后选择创建的新配置运行项目。
当然你可以打开一个新的终端,只需输入“mvn spring-boot:run”它也可以。
以上是关于IntelliJ 15,SpringBoot devtools livereload无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
当 spring-boot 运行时 IntelliJ 进程以退出代码 0 完成
Eclipse & Intellij DE - 无法连接到 mysql 数据库