在一个Spring boot项目中,添加了一些zip压缩文件。在开发过程中,从项目中下载的文件能够正常打开。但一旦打成jar包后,下载的zip包就打不开了。
原因定位
查看下载的zip压缩包,我们发现下载的zip文件要比我们原来的要大。所以我们怀疑是spring boot打包导致。通过查找相关资料,原因是我们在maven打包资源是设置了filtering。
示例:
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
maven打包资源时,filtering如果为true,maven会使用环境变量替换文件中引用了此变量的值,但是对于二进制文件,可能导致文件破坏。
解决方法
方法一:先排除二进制文件,如zip文件。filtering设为true。然后添加一个resource,针对二进制文件设置filtering为false。
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.zip</exclude>
<exclude>**/*.csv</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.zip</include>
<include>**/*.csv</include>
</includes>
</resource>
方法二:
在resource maven插件,对特定后缀的文件不做filtering:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven-resources-plugin.version}</version>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>db</nonFilteredFileExtension>
<nonFilteredFileExtension>zip</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>