Spring Boot DevTools 在 Eclipse 中不工作

Spring Boot DevTools not working in Eclipse

我使用 Spring、JPA、MySQL 和 Web 构建了一个应用程序。我在template文件夹下正常开发了一个静态页面,可以正常使用

但是,当我在静态页面上更改某些内容时,无法重新加载更改。然后,我打开 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>

根据 Spring 引导文档:

Applications that use spring-boot-devtools will automatically restart whenever files on the classpath change. This can be a useful feature when working in an IDE as it gives a very fast feedback loop for code changes. By default, any entry on the classpath that points to a folder will be monitored for changes. Note that certain resources such as static assets and view templates do not need to restart the application.

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

我关注了这篇文章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 运行时。

即使尝试了上述答案,如果仍然无法正常工作,请尝试在 Eclipse 中为项目启用自动构建。之后对我有用。

在您的 Eclipse 顶部菜单中,您的 Project -> Build Automatically ON ?

这个问题已经得到解答,但对我来说并没有完全按照接受的答案或其他答案所说的那样工作。

我的开发工具按以下方式工作:

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 进入开发工具的依赖项 AND 擦除 Maven 缓存。

希望这对某人有所帮助。

这对我有用。在 application.properties 文件中添加以下行,

spring.devtools.restart.enabled=true

除了上面给出的答案之外,您还需要在 Eclipse 中启用自动构建。如果您的 java 文件已更新,开发工具并不关心,它唯一要查找的是 .class、资源文件更改。

对于 IntelliJ,请参考下图。

就我而言,问题出在 Eclipse 的 Java 构建路径 (Right Click Project > Properties > Java Build Path > Source Tab) 上,最终在根本不存在的源文件夹之一上出现错误。在我从构建路径中删除该文件夹后,它开始自动构建。

有人遇到同样问题的另一个原因是 PARENT 标签下 Spring-Boot-Starter-Parent Artifact Id,版本已经提到,所以如果你从 Spring 初学者项目的任何其他来源复制了依赖项,您不需要在 Spring DevTools 依赖项 中明确提及版本。所以只需从中删除版本和版本标签。