Java SpringBoot应用程序在打包到jar后不提供静态资源

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

我有一个应用程序,当通过ide或命令行启动时工作得非常好:mvn spring boot:run。但当我将其打包到jar中时,我无法访问静态资源(404未找到)。我不想在resource fouler中存储静态文件,所以每次需要更改静态文件时,我不必重新加载服务器。所以我在pom.xml中使用了这个插件:

              <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/");
}