Spring boot maven打包后文件变大原因以及解决方法

在一个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>


版权声明:著作权归作者所有。

相关推荐

MySQL使用NOT IN存在null值导致结果错误的解决方法

house表:create table house (address varchar(200) not null, heating varchar(50));表中有两个字段,address地址,不能为null,凉爽程度heating 可以为null。插入记录:insert into house values ('A', null),('B','hot');in查询语句:select address

Spring Boot集成JSP

Spring Boot是不推荐使用JSP作为模板文件。如果Spring Boot使用JSP是有一些限制,其中只能打包成可执行的war包或者可在外部容器(如tomcat)部署的war包。项目目录结构在普通的spring boot项目基础上,在src/main下新增目录webapp/WEB-INF/jsp用来存放jsp文件,静态文件存放在/src/resources/static。结构如图:

Spring Boot使用Jasypt加密配置文件

Jasypt Spring Boot为Spring Boot项目的属性提供了加密支持。有三种方式集成jasypt-spring-boot到Spring boot应用中。jasypt-spring-boot-starter如果Spring Boot项目中使用了@SpringBootApplication或者@EnableAutoConfiguration,在项目里添加jasypt-spring-bo

Spring Boot 集成RabbitMQ

此处假设已经安装好了RabbitMQ,主要讲述使用Spring Boot如何集成RabbitMQ。添加依赖在Maven的pom.xml添加rabbitmq的starter依赖,内容如下:<?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo

Spring Boot集成kafka

Spring Boot对kafka提供了自动配置(auto configuration)。使用用Spring Boot只需要做很少的配置即可集成对kafka的访问。pom配置1、继承spring-boot-starter-parent<parent>   <groupId>org.springframework.boot&l

Spring Boot:日志集成

Java日志框架Java有好几个日志框架,我们有时在选择Java日志框架时会有点迷惑。下面几个是常用的日志框架Common Logging:Apache最早提供的日志的门面接口。避免和具体的日志方案直接耦合。SLF4J(Simple Logging Facade for JAVA):和Common Logging一样,是一个门面框架,是对