15

我使用 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>
4

8 回答 8

30

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

于 2018-06-29T18:56:01.537 回答
15

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

于 2017-08-13T09:32:02.293 回答
8

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

我有 devtools 以下列方式工作:

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 缓存。

希望这对某人有帮助。

于 2018-08-29T18:07:17.747 回答
3

除了上面给出的答案,您还需要在 Eclipse 中启用 Build Automatically。如果你的 java 文件被更新,开发工具并不重要,它唯一寻找的是 .class,资源文件的变化。

对于 IntelliJ,请参阅下图。

在此处输入图像描述

于 2019-08-11T00:48:04.133 回答
1

根据 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

于 2017-03-31T18:50:52.387 回答
0

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

于 2018-03-14T18:26:19.560 回答
0

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

于 2021-07-12T06:33:33.913 回答
0

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

spring.devtools.restart.enabled=true
于 2018-09-22T16:20:34.917 回答