一、问题起因
服务启动后,访问流程页面发现有些图标显示方块,鼠标右键 查看console显示如下:
Failed to decode downloaded font(线上环境字体图标不显示)
于是开始排查,发现是pom文件 打包将字体文件给处理了,原始pom文件如下:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.json</include>
<include>**/*.properties</include>
<include>**/*.yml</include>
</includes>
<filtering>false</filtering>
</resource>
<!--配置处理了src/main/resources下的所有文件,所以resources目录下font文件也被处理了,于是需要排除这几个文件-->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<filters>
<filter>src/main/resources/config/${profiles.active}.properties</filter>
</filters>
修改配置如下:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>static/fonts/**</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>static/fonts/**</include>
</includes>
</resource>
</resources>
<filters>
<filter>src/main/resources/config/${profiles.active}.properties</filter>
</filters>
第1个resource表示: 需要过滤除了 static/fonts/**
的文件 作为资源文件,并配置了filter 需要处理它们。
但是static/fonts/**
下的文件必须也作为资源文件,于是又配置了下面resources表示:
static/fonts/**
下的文件是资源文件,并配置了fileter不需要处理。
如果不加后面那个resources,那么static/fonts/**
不会被当成资源文件。当页面访问这个目录下的文件时会报404,如下:
所以后面必须还需要配置一个resources来包含这个目录下的文件, 配置filter:false ,表示不处理。
二、include与exclude及其filter的使用
Maven resource 中的<include>
与<exclude>
用于包含或排除某一文件目录下的文件是否是工程资源的。
若<include>
与<exclude>
划定的范围存在冲突,则以<exclude>
配置为准。
多数情况下,使用<include>
和<exclude>
是为了配合<filtering>
实现替换文件中的变量的需要。
例如:
在某一个工程中,src/main/resources
目录下都是工程的资源文件,并不需要<include>
和<exclude>
再进行划定。
但如果需要对且仅对其中的jdbc.properties
和mail.properties
两个文件进行过滤,则需要借助<include>
和<exclude>
进行如下的配置:
<resources>
<!-- Filter jdbc.properties & mail.properties.-->
<!-- NOTE: We don't filter applicationContext-*.xml -->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>jdbc.properties</include>
<include>mail.properties</include>
</includes>
</resource>
<!-- Include other files as resources files. -->
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>jdbc.properties</exclude>
<exclude>mail.properties</exclude>
</excludes>
</resource>
</resources>
其中第一段<resource>
配置声明:在src/main/resources
目录下,仅jdbc.properties
和mail.properties
两个文件是资源文件,然后,这两个文件需要被处理替换。而第二段<resource>
配置声明:同样在src/main/resources
目录下,除jdbc.properties
和mail.properties
两个文件外的其他文件也是资源文件,但是它们不会被处理替换。
参考:
https://blog.youkuaiyun.com/wangjunjun2008/article/details/54708079