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 &gt; Properties &gt; Java Build Path &gt; Source Tab) 上,最终导致其中一个根本不存在的源文件夹出现错误。从构建路径中删除该文件夹后,它开始自动构建。

【讨论】:

以上是关于Spring Boot DevTools 在 Eclipse 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot-devtools 实现热部署

Spring Boot DevTools使用教程

Spring Boot DevTools使用教程

Spring Boot学习笔记-配置devtools实现热部署

spring-boot 速成 devtools之热部署

使用spring boot devtools不要多此一举加try...catch