Java SpringBoot应用程序在打包到jar后不提供静态资源
我有一个应用程序,当通过ide或命令行启动时工作得非常好:mvn spring boot:run。但当我将其打包到jar中时,我无法访问静态资源(404未找到)。我不想在resource fouler中存储静态文件,所以每次需要更改静态文件时,我不必重新加载服务器。所以我在pom.xml中使用了这个插件:Java SpringBoot应用程序在打包到jar后不提供静态资源,java,spring,maven,spring-mvc,spring-boot,Java,Spring,Maven,Spring Mvc,Spring Boot,我有一个应用程序,当通过ide或命令行启动时工作得非常好:mvn spring boot:run。但当我将其打包到jar中时,我无法访问静态资源(404未找到)。我不想在resource fouler中存储静态文件,所以每次需要更改静态文件时,我不必重新加载服务器。所以我在pom.xml中使用了这个插件: <plugin> <artifactId>maven-resources-plugin</artifa
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes/static</outputDirectory>
<resources>
<resource>
<directory>src/main/webapp</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
控制器请求映射工作正常,问题仅限于静态资源。您应该提供多个资源位置以解决:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("/", "classpath:/static/");
}
对我来说,当我将
@EnableWebMvc
注释添加到webmvcconfigureadapter
类时,静态资源就停止提供服务了。如果没有它,它就可以正常工作。不管它值多少钱,Boot通常只需将资源放在resources目录中的目录static
或public
,然后让Boot的默认MVC配置处理注册。你可以删掉所有的代码。插件执行了吗?你能在输出日志中看到它吗?你在build/plugins
或build/pluginManagement/plugins
中定义了它吗?@A_Di-Matteo,我在build/plugins中定义了它,是的,它可以工作,我可以用winRar打开jar,并在那里看到静态文件夹,其中包含来自webapp的所有文件folder@chrylis对但是我是否仍然能够编辑文件而不需要重新启动服务器?这取决于您如何启动。我以工作区分辨率从Eclipse启动,没有任何问题。谢谢,这真的很有用,我甚至不知道,可以提供多个位置
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("/", "classpath:/static/");
}