如何解决Spring Boot Dev Tools / Live Reloading - 静态资源的刷新不起作用 IntelliJ 配置什么有效什么不起作用实时重载我的问题
为了改善开发者体验,我尝试包含 Spring Dev Tools。
我的设置:
- 多个模块
- Gradle 6.6
- Spring Boot 2.4.2
- 百里香叶
- 与子页面的 Webpack 反应
我使用多项目 gradle 构建,其中包含一个 settings.gradle
文件和一个也具有 Spring Boot bootJar
的子模块。在那个 build.gradle
的文件中,我添加了 developmentOnly("org.springframework.boot:spring-boot-devtools")
行。
IntelliJ 配置
我通过 IntelliJ 启动我的应用程序:
我还在“设置 > 编译器”设置以及“compiler.automake.allow.when.app.running”中启用了“自动构建项目”。
什么有效
当我启动应用程序时,我看到了日志消息
[2021-03-17 14:18:02.001] INFO [restartedMain] --- o.s.b.d.a.OptionalLiveReloadServer: LiveReload server is running on port 35729
声明我的 LiveReloadServer 已启动。
当我在 Java 文件中应用更改时,会触发构建和重新启动,因此更改后的重新启动确实有效 - 虽然它很慢 - 即使我只更改 Java 类中的一行,重建也需要 15 秒至少。
什么不起作用
当我将更改应用于我的 HTML、CSS 或 JS 文件或我的 React 应用程序时,更改只会在项目重建后反映。我的所有资源都在默认的 resources/static
文件夹中,因此它们应该由开发工具重新加载处理。
仅供参考,我用 webpack 打包了我的 react-app,当我开始执行 webpack watch
任务时,它会在我应用更改时正确重建我的 bundle.js。
我确实有一个自定义的 ResourceRegistryHandler 设置,这可能是问题的一部分,尽管我不明白为什么:
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
boolean devMode = this.env.acceptsProfiles(Profiles.of("dev"));
boolean useResourceCache = !devMode;
final String[] pathPatterns = Arrays.stream(RESOURCE_FOLDERS).map(f -> f + FOLDER_SUFFIX)
.toArray(String[]::new);
final String[] resourceLocations = Arrays.stream(RESOURCE_FOLDERS).map(f -> CLASSPATH_PREFIX + f)
.toArray(String[]::new);
if (useResourceCache) {
resourceProperties.getCache().setPeriod(Duration.of(365,ChronoUnit.DAYS));
registry.addResourceHandler(pathPatterns)
.addResourceLocations(resourceLocations)
.setCachePeriod((int) Duration.of(365,ChronoUnit.DAYS).getSeconds())
.resourceChain(true)
.addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"))
.addTransformer(new CssLinkResourceTransformer());
} else {
resourceProperties.getCache().setPeriod(Duration.of(0,ChronoUnit.DAYS));
registry.addResourceHandler(pathPatterns)
.addResourceLocations(resourceLocations)
.setCachePeriod(0)
.resourceChain(false);
}
}
实时重载
除此之外,静态资源根本没有刷新,我还想知道如何使用实时重新加载 chrome 插件,因为当我想要启用实时重新加载时,总是会弹出一个说明 Cannot download livereload.js
的弹出窗口浏览器插件。
我的问题
- 如何让 Spring 刷新静态资源?他们甚至不会在我重新加载页面时刷新,只有在重新启动被触发并完成后才会刷新
- 我怎样才能让它与 Live Reload 一起使用?
我也很想知道为什么我的项目构建可能需要这么长时间,即使有那么小的变化,我可能会检查 gradle 构建扫描。
解决方法
我也在寻找这个问题的答案!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。