Spring Boot DevTools 在 Eclipse 中不起作用
Posted
技术标签:
【中文标题】Spring Boot DevTools 在 Eclipse 中不起作用【英文标题】:Spring Boot DevTools not working in Eclipse 【发布时间】:2017-08-26 02:35:09 【问题描述】:我使用 Spring、JPA、mysql 和 Web 构建了一个应用程序。我在模板文件夹中正常开发了一个静态页面,它可以工作。
但是,当我在静态页面上更改某些内容时,我无法通过更改重新加载它。然后,我打开 pom.xml 并添加了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
我重新启动了应用程序,但是当我在静态页面上进行一些更改时仍然无法正常工作。
还有其他事情要做吗?
我的 POM.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.engsoftware</groupId>
<artifactId>cobranca</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Cobranca</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
【问题讨论】:
尝试从命令行mvn spring-boot:run
运行它,它在 STS 和命令行以及相同的 POM 中对我有用。
您安装了LiveReload extension 吗?
我在 Chrome 上安装了 LiveReload 扩展。但仍然无法正常工作。如果我在不同的浏览器中打开,显示相同的页面而不做任何更改。我也尝试清理浏览器的缓存,但没有成功。我清理并安装了 Maven,什么也没有。
【参考方案1】:
在你的 Eclipse 顶部菜单中你的 Project
-> Build Automatically
ON ?
【讨论】:
您可能需要添加更多详细信息,说明该设置的作用以及解决问题的原因。就目前的情况而言,它只不过是应在评论中提出的澄清请求。 完美。谢谢 我以前怎么没想到!?这几天一直困扰着我!我几乎尝试了所有与 SpringBoot 相关的设置...我没想到要检查我是否不小心禁用了 Eclipse 中的自动构建 - sigh... 谢谢! 非常感谢。我总是忘记这一点。【参考方案2】:我关注了这篇文章https://github.com/spring-projects/spring-boot/issues/7479
因此,要让 devtools 正常工作,您必须添加:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>runtime</scope>
</dependency>
秘诀是添加 Optional True 和 Scope 运行时。
【讨论】:
【参考方案3】:这个问题已经回答了,但对我来说并没有完全按照接受的答案或其他答案所说的那样工作。
我的开发工具按以下方式工作:
1) 使用 devtools 依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>runtime</scope>
</dependency>
2) 删除 Spring Maven 缓存,在 Linux 中是:
rm -rf ~/.m2/repository/org/springframework/*
3) 返回 Eclipse,按 Alt+F5 并强制清理项目,将每个依赖项从 Maven 重新下载到缓存。
关键是将 optional
标志设置为 true
到 devtools 的依赖项并擦除 Maven 缓存。
希望这对某人有所帮助。
【讨论】:
第 2 步为我解决了这个问题。似乎有某种缓存导致 devtools 未正确加载。【参考方案4】:除了上面给出的答案,您还需要在 Eclipse 中启用 Build Automatically。如果您的 java 文件被更新,Dev Tools 并不重要,它唯一寻找的是 .class,资源文件的更改。
对于 IntelliJ,请参阅下图。
【讨论】:
【参考方案5】:根据 Spring Boot 文档:
每当类路径上的文件发生变化时,使用 spring-boot-devtools 的应用程序将自动重新启动。在 IDE 中工作时,这可能是一个有用的功能,因为它为代码更改提供了非常快速的反馈循环。默认情况下,将监视指向文件夹的类路径上的任何条目的更改。请注意,静态资产和视图模板等某些资源不需要重新启动应用程序。
http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html#using-boot-devtools-restart
模板和静态资产不需要重新启动。您的浏览器很可能正在缓存模板并使用缓存版本而不是请求新模板。如果您清除浏览器缓存,您应该会看到更新后的模板。
编辑:
根据您使用的模板技术,您需要在属性文件中设置一个属性以禁用模板缓存
# Thymeleaf
spring.thymeleaf.cache = false
#FreeMarker
spring.freemarker.cache = false
#Groovy
spring.groovy.template.cache = false
http://docs.spring.io/spring-boot/docs/current/reference/html/howto-hotswapping.html#howto-reload-static-content
【讨论】:
我在 Chrome 上安装了 LiveReload 扩展。但仍然无法正常工作。如果我在不同的浏览器中打开,显示相同的页面而不做任何更改。我也尝试清理浏览器的缓存,但没有成功。我清理并安装了 Maven,什么也没有。 @JohnMendes 在 Eclipse 中,您是否在添加 devtools 依赖项后尝试清理并重建项目?还有你用什么做模板? 刚刚查看了您的 pom 并看到了 Thymeleaf 的依赖项。您需要在属性文件中将 Thymeleaf 模板缓存设置为 false。 spring.thymeleaf.cache=false【参考方案6】:即使在尝试了上述答案之后,如果仍然无法正常工作,请尝试在 Eclipse 中为项目自动启用构建。之后它对我有用。
【讨论】:
【参考方案7】:这对我有用。在 application.properties 文件中添加以下行,
spring.devtools.restart.enabled=true
【讨论】:
【参考方案8】:就我而言,问题出在 Eclipse 的 Java 构建路径 (Right Click Project > Properties > Java Build Path > Source Tab
) 上,最终导致其中一个根本不存在的源文件夹出现错误。从构建路径中删除该文件夹后,它开始自动构建。
【讨论】:
以上是关于Spring Boot DevTools 在 Eclipse 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章