在打包到jar后,Spring启动应用程序不提供静态资源

时间:2016-08-30 16:15:31

标签: java spring maven spring-mvc spring-boot

我有一个通过ide或命令行启动时运行良好的应用程序:mvn spring-boot:run。但是当我将它打包到jar中时,我无法访问静态资源(404找不到)。我不想在资源控制器中存储静态文件,所以每次我需要更改静态文件时都不必重新加载服务器。所以我在我的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>

我可以看到文件正在两个目录“static”中复制。 这是我的资源处理程序配置:

    @Configuration
    @EnableWebMvc
    public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("/");
    }

控制器RequestMappings工作正常,问题只与静态资源有关。

2 个答案:

答案 0 :(得分:6)

您应该提供多个资源位置来解析:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/**").addResourceLocations("/", "classpath:/static/");
}

答案 1 :(得分:0)

对我来说,当我将@EnableWebMvc注释添加到WebMvcConfigurerAdapter类时,静态资源会停止提供。没有它,它工作正常。