使用 Spring Boot 1.3、spring-boot-devtools 和 Thymeleaf 模板在 Netbeans 中更改时不会进行实时重新加载
Using Spring Boot 1.3, spring-boot-devtools and Thymeleaf templates won't do live reload when changed in Netbeans
Spring Boot 1.3 引入了 spring-boot-devtools 以提供与 Spring 类似的功能重新加载以重新加载修改后的 classes 并更新 Thymeleaf 模板而无需重新运行你的申请。
我之前一直在使用 Spring Boot 1.2.7(Spring 重新加载)并且我能够即时修改我的模板而无需重新启动我的 Spring Boot申请。
当我修改并保存 Java 代码/Thymeleaf 模板时,同一个应用程序现在既不重新加载 Thymeleaf 模板也不 reloading/restarting 应用程序。
我正在使用 Netbeans 8.0.2 和嵌入在 Netbeans IDE 中的 Maven(版本 3.0.5)。该应用程序被打包为 JAR。
在 Netbeans 中,在项目 Properties -> Build -> Compile 下有一个复选框 "Compile On Save" 被勾选。
我通过修改 .java 文件并检查 /target/classes.
中的时间戳来验证这确实有效
这是
"Run action" properties for the project in Netbeans:
我的 pom.xml 中有以下依赖(包括其他,因不相关而被排除):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
有了这个,我应该准备好了,因为
Spring Boot 博客提到以下内容:
"When you have the spring-boot-devtools module included, any classpath file changes will automatically trigger an application restart."
Spring Boot official documentation.
中也有类似的评论
编辑:
我尝试将 spring-boot-maven-plugin 与版本标记 1.2.7.RELEASE 一起使用,并且在保存模板时突然在浏览器中可以看到对我的 Thymeleaf 模板的更改。似乎至少 Thymeleaf 模板的问题不是因为 spring-boot-devtools,而是因为 spring-bot-maven-plugin.
问题可以分为两部分:
1) Thymeleaf 模板,如果使用较新版本的 spring-boot-maven-plugin (1.3.0.RELEASE),由于某种原因不会重新加载
2) 应用程序 reload/restart 触发器不会发生,即使 /target/classes 中的 .class 文件在相应的 .java 文件被修改和保存时得到更新。
更新:已验证未加载 devtools(主线程名称未重新启动 Main)。
通过将 Netbeans 项目属性中的 运行 项目操作中的执行目标更改为以下内容来解决 2):
process-classes org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
旧的执行目标是 package spring-boot:run
。当项目是 运行 with spring-boot:运行.
时,谷歌搜索显示其他人对 spring-boot-devtools 有问题
现在唯一的问题是 Thymeleaf 模板在保存时不会实时更新。
将 Netbeans 项目属性中 运行 项目操作中的执行目标更改为以下内容:
process-classes org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
而不是 package spring-boot:run
启用 Spring Boot Devtools 并按预期重新启动。
Thymeleaf 模板的问题归因于以下事实:在 Spring Boot 1.3 中,Spring Boot Maven 插件不再将 src/main/resources 直接添加到类路径中。 See release notes for details.
将显式资源目录位置(在我的例子中为 src/main/resources)配置为 pom.xml 解决了 Thymeleaf 模板未重新加载的问题:
<build>
...
<resources>
<resource>
<directory> src/main/resources </directory>
</resource>
</resources>
...
</build>
我使用 Spring 展位 1.4.2.RELEASE。在我执行以下操作后,LiveReload 为我工作:
- 安装 Chrome
的 LiveReload 扩展
- 将
addResources
添加到 spring-boot-maven-plugin
maven 配置。
文件pom.xml
<build>
...
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
...
</plugins>
...
</build>
参考:http://docs.spring.io/spring-boot/docs/current/maven-plugin/usage.html
Spring Boot 1.3 引入了 spring-boot-devtools 以提供与 Spring 类似的功能重新加载以重新加载修改后的 classes 并更新 Thymeleaf 模板而无需重新运行你的申请。
我之前一直在使用 Spring Boot 1.2.7(Spring 重新加载)并且我能够即时修改我的模板而无需重新启动我的 Spring Boot申请。
当我修改并保存 Java 代码/Thymeleaf 模板时,同一个应用程序现在既不重新加载 Thymeleaf 模板也不 reloading/restarting 应用程序。
我正在使用 Netbeans 8.0.2 和嵌入在 Netbeans IDE 中的 Maven(版本 3.0.5)。该应用程序被打包为 JAR。
在 Netbeans 中,在项目 Properties -> Build -> Compile 下有一个复选框 "Compile On Save" 被勾选。 我通过修改 .java 文件并检查 /target/classes.
中的时间戳来验证这确实有效这是 "Run action" properties for the project in Netbeans:
我的 pom.xml 中有以下依赖(包括其他,因不相关而被排除):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
有了这个,我应该准备好了,因为 Spring Boot 博客提到以下内容:
"When you have the spring-boot-devtools module included, any classpath file changes will automatically trigger an application restart."
Spring Boot official documentation.
中也有类似的评论编辑: 我尝试将 spring-boot-maven-plugin 与版本标记 1.2.7.RELEASE 一起使用,并且在保存模板时突然在浏览器中可以看到对我的 Thymeleaf 模板的更改。似乎至少 Thymeleaf 模板的问题不是因为 spring-boot-devtools,而是因为 spring-bot-maven-plugin.
问题可以分为两部分:
1) Thymeleaf 模板,如果使用较新版本的 spring-boot-maven-plugin (1.3.0.RELEASE),由于某种原因不会重新加载 2) 应用程序 reload/restart 触发器不会发生,即使 /target/classes 中的 .class 文件在相应的 .java 文件被修改和保存时得到更新。
更新:已验证未加载 devtools(主线程名称未重新启动 Main)。 通过将 Netbeans 项目属性中的 运行 项目操作中的执行目标更改为以下内容来解决 2):
process-classes org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
旧的执行目标是 package spring-boot:run
。当项目是 运行 with spring-boot:运行.
现在唯一的问题是 Thymeleaf 模板在保存时不会实时更新。
将 Netbeans 项目属性中 运行 项目操作中的执行目标更改为以下内容:
process-classes org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
而不是 package spring-boot:run
启用 Spring Boot Devtools 并按预期重新启动。
Thymeleaf 模板的问题归因于以下事实:在 Spring Boot 1.3 中,Spring Boot Maven 插件不再将 src/main/resources 直接添加到类路径中。 See release notes for details.
将显式资源目录位置(在我的例子中为 src/main/resources)配置为 pom.xml 解决了 Thymeleaf 模板未重新加载的问题:
<build>
...
<resources>
<resource>
<directory> src/main/resources </directory>
</resource>
</resources>
...
</build>
我使用 Spring 展位 1.4.2.RELEASE。在我执行以下操作后,LiveReload 为我工作:
- 安装 Chrome 的 LiveReload 扩展
- 将
addResources
添加到spring-boot-maven-plugin
maven 配置。
文件pom.xml
<build>
...
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
...
</plugins>
...
</build>
参考:http://docs.spring.io/spring-boot/docs/current/maven-plugin/usage.html