问题描述
最近在开发一个服务时候,需要将服务与前端页面整合到spring boot包中。于是,将打包后的静态文件放入src/resource/static中,其中包括favicon.ico文件。
在本地运行时候发现favicon.ico无法显示,查看开发者控制台发现请求是返回200的状态码,说明文件是存在的。然后进入到src/resource/static中发现favicon.ico也是能正常显示的。一开始以为是不是spring boot对该文件做了什么限制,搜索了一番,好像不是spring boot的限制。这时候,我想到了打包后的文件是不是有文件,于是在idea中打开了target下面的static目录,打开ico文件发现确实是无法显示。

原因分析:
顺着上面的发现,我将问题定位到了打包上,于是打开了pom.xml文件,在最后面build标签中有这样一段配置:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
由于之前也是借用公司的模板,所以这段配置没有细看,查看资料后发现这块的配置主要用于资源过滤,即在构建过程中,将资源文件中的占位符(如 ${property.name})替换为实际值的过程。然而这样的配置是对所有文件都起作用,像favicon.ico这样的二进制文件也会做了一些特殊的过来处理,插入了额外的信息,导致最终打包后的文件打开异常。
解决方案:
修改pom.xml中的打包配置,过滤静态文件夹,不对该文件夹下的文件进行过滤。配置完后,删除target下的文件重新打包。
<resources>
<!-- 1. 配置文件:需要过滤,排除 static -->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>static/**</exclude>
</excludes>
</resource>
<!-- 2. 静态资源:不需要过滤,但要包含 -->
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>static/**</include>
</includes>
</resource>
</resources>
441

被折叠的 条评论
为什么被折叠?



