我有一个具有以下结构的项目(就像spring.io):
├── frontend
│ ├── dist
│ | ├── app.js
│ | ├── vendor.js
│ | ├── style.css
│ | ├── index.html
│ ├── node_modules
│ ├── src
│ ├── package.json
│ ├── pom.xml
├── site
│ ├── src
│ ├── pom.xml
frontend
是一个NodeJS项目,site
是一个Spring Boot项目。
frontend/dist
内的所有文件(包括html)都是由webpack自动生成的。为了访问
他们来自Spring Boot app我配置了开发资料。
application.yml
spring:
profiles: development
resources:
static-locations:
- file:../frontend/dist/
一切正常。但是,当我将spring-boot-devtools添加到站点项目类路径中时,我为dist
文件夹中的任何文件获取404。
http://localhost:8080/ -> 404
http://localhost:8080/app.js -> 404
同样,没有devtools - 没问题。
此外,如果我用addResourceHandlers替换静态位置,它也可以工作(无论是否使用devtools)。
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("file:/full/path/to/frontend/dist/");
}
这是一个devtools错误还是我的错?
更新
好的,谢谢@AndyWilkinson,我已经找到了问题的原因。我在IntelliJ中工作并使用运行配置来设置env变量。以下是生成的命令行:
/usr/lib/jvm/java-8-oracle/bin/java -bla-bla-bla -Didea.version=2017.1.3 -T 2 -Dspring.profiles.active=dev spring-boot:run
但是如果devtools在项目类路径中,Spring Boot会忽略它们:
Could not find key 'spring.profiles.active' in any property source
No active profile set, falling back to default profiles: default
现在,如果我只是从pom.xml中删除devtools
The following profiles are active: dev
Activated profiles dev
......哇,它再次起作用。
可能的解决方法是直接通过application.yml设置活动配置文件。
spring:
profiles:
active: dev
---
spring:
profiles: dev
resources:
static-locations:
- file:../frontend/dist/
..但我不喜欢它,因为它不方便。
因为devtools是如此痛苦,我想我会像以前一样使用F5。
答案 0 :(得分:0)
我有类似的问题。
我在spring.resources.static-location=file:../frontend/build
application.properties
使用也可以添加绝对路径
spring.resources.static-location=file:/User/XYZ/Desktop/frontend/build
答案 1 :(得分:0)
还配置InternalResourceViewResolver来解析静态资源:
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/classes/static/");
viewResolver.setSuffix("");
return viewResolver;
}