使用java加载外部字体,报错java.awt.FontFormatException: bad table, tag=一串数字,实际上是字体文件被损坏导致的。
其根本原因是maven打包时,如果开启了filtering,会在打包时重新编译资源目录下的文件,导致某些类型的文件编译后无法使用。代码如下:
<build>
<finalName>${artifactId}</finalName>
<!-- directory下文件输出目录 -->
<outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
<resources>
<resource>
<!--指定资源目录 -->
<directory>src/main/resources</directory>
<!-- 开启过滤,将maven中声明的参数替换directory下的文件中的参数 -->
<filtering>true</filtering>
</resource>
</resources>
</build>
解决方法为,在build标签下添加如下代码:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>zip</nonFilteredFileExtension>
<nonFilteredFileExtension>cer</nonFilteredFileExtension>
<nonFilteredFileExtension>pfx</nonFilteredFileExtension>
<nonFilteredFileExtension>py</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
通过在资源文件处理插件中排除对应类型的文件,即可避免问题
网友评论