Spring Boot不从罐子内部提供静态文件

时间:2019-02-17 17:24:54

标签: java spring spring-boot

Spring Boot不提供放置在jar中的静态文件。

我有一个后端应用程序,因此决定添加前端。设置任务,用于将静态前端文件复制到src/main/resources/static。在SO上浏览了一堆答案,所有这些都建议静态内容(index.html,.js和.css文件)应该位于src/main/resources/staticsrc/main/resources/public下,我都尝试过。我打开了内置的.jar,并且有静态文件存在,但是使用java -jar myApp.jar启动应用程序并打开localhost:8080给了我默认的whitelabel错误页面。我的应用程序正常运行,因为我可以访问已在其上运行的api。 应用程序没有@EnableWebMvc或任何其他自定义配置。

如果我手动将相同的静态资源复制/粘贴到项目的src/main/resources/static并使用IDE中的@SpringBootApplication类运行应用程序-资源加载没有问题,并且index.html在访问localhost:8080时打开,因此当文件位于.jar中时,这只是一个问题。 当静态文件位于可运行的spring boot .jar文件中时,它们是否应该有所不同? 春季启动版本2.1.1

1 个答案:

答案 0 :(得分:1)

我正面临着同样的问题。

如果有帮助,我可以通过添加以下配置来设法正确处理静态文件:

软件包fr.maif.darwin.api.security;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc
public class StaticFilesConfig implements WebMvcConfigurer {

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

...但是它会覆盖Spring Boot中的“​​隐式”自动配置,而我的其余过滤器等也不再起作用... =>这是因为@EnableWebMvc停用了spring的默认配置。 / p>

[EDIT] 最后,我偶然发现,包含静态文件的jar不包含在内置的bootJar中。您可能要检查一下。 HTH!