Failed to decode downloaded font之Maven resource 配置中include与exclude及其filter的使用

文章目录

  • 一、问题起因
  • 二、include与exclude及其filter的使用

一、问题起因

服务启动后,访问流程页面发现有些图标显示方块,鼠标右键 查看console显示如下:
在这里插入图片描述

Failed to decode downloaded font(线上环境字体图标不显示)

于是开始排查,发现是pom文件 打包将字体文件给处理了,原始pom文件如下:

<resources>
    <resource>
        <directory>src/main/javadirectory>
        <includes>
            <include>**/*.xmlinclude>
            <include>**/*.jsoninclude>
            <include>**/*.propertiesinclude>
            <include>**/*.ymlinclude>
        includes>
        <filtering>falsefiltering>
    resource>
    
    <resource>
        <directory>src/main/resourcesdirectory>
        <filtering>truefiltering>
    resource>
resources>
<filters>
    <filter>src/main/resources/config/${profiles.active}.propertiesfilter>
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,如下:
Failed to decode downloaded font之Maven resource 配置中include与exclude及其filter的使用_第1张图片
所以后面必须还需要配置一个resources来包含这个目录下的文件, 配置filter:false ,表示不处理。

二、include与exclude及其filter的使用

Maven resource 中的用于包含或排除某一文件目录下的文件是否是工程资源的。

划定的范围存在冲突,则以配置为准。

多数情况下,使用是为了配合实现替换文件中的变量的需要。

例如:

在某一个工程中,src/main/resources目录下都是工程的资源文件,并不需要再进行划定。

但如果需要对且仅对其中的jdbc.propertiesmail.properties两个文件进行过滤,则需要借助进行如下的配置:

<resources>


  <resource>
    <directory>src/main/resourcesdirectory>
    <filtering>truefiltering>
    <includes>
      <include>jdbc.propertiesinclude>
      <include>mail.propertiesinclude>
    includes>
  resource>
  
  <resource>
    <directory>src/main/resourcesdirectory>
    <filtering>falsefiltering>
    <excludes>
      <exclude>jdbc.propertiesexclude>
      <exclude>mail.propertiesexclude>
    excludes>
  resource>
resources>

其中第一段配置声明:在src/main/resources目录下,仅jdbc.propertiesmail.properties两个文件是资源文件,然后,这两个文件需要被处理替换。而第二段配置声明:同样在src/main/resources目录下,除jdbc.propertiesmail.properties两个文件外的其他文件也是资源文件,但是它们不会被处理替换。

参考:
https://blog.csdn.net/wangjunjun2008/article/details/54708079

你可能感兴趣的:(IDEA常用,maven)