SpringBoot 打包文件过大

SpringBoot通过Maven打包的时候会把所有的依赖打到一个包内,导致在往服务器上传的时候耗时过多,浪费时间。

通过Maven进行打包的时候,可以看到实际上打出的包有两个其中一个是完整的包,以.jar结尾,另一个是单纯的代码包,什么依赖文件都没有,以.jar.original结尾。


original

我们通常传到服务器上的都是完整的包,通过java -jar package-name.jar 即可运行程序,通过以下方法可以在依赖不发生变化的情况下只上传一次完整包。

首先解压上传到服务器上的完整包,-d 跟的参数是目标文件名

unzip -q kafka-0.0.1-SNAPSHOT.jar -d kafka

标准SpingBoot项目解压之后会得到三个文件夹分别是BOOT-INF、META-INF、org

可以看到BOOT-INF文件夹下有一个lib文件夹,这里存放的就是所有需要的依赖,org文件夹下存放的是SpingBoot项目启动的标准文件,META-INF下存放的是打包的基本信息。这里我们需要操作的是BOOT-INF文件夹下的classes文件夹,每次如果不需要更改其他依赖,只更改代码的话,只需要替换classes文件夹下的内容。

上传.jar.original这个单纯的代码包到服务器,通过上述的方式进行解压,记得替换目标目录。

解压后会发现其中的文件内容,除了比完整包BOOT-INF/classes目录下的内容多了一个META-INF文件夹之外,其他结构都是相同的,现在只需要将这个META-INF文件夹删掉,将完整包下的BOOT-INF/classes目录下的内容删掉,将.jar.original包解压后的内容复制到BOOT-INF/classes中,现在有用的,只有完整包解压出来的目录,通过如下命令即可运行程序,其中-cp参数跟的是完整包解压的目录。

java -cp kafka org.springframework.boot.loader.JarLauncher

实际上上述过程在实际操作的时候步骤还是很多的,可以将其写成脚本来执行,具体过程无非就是:

  • 上传original包
  • 删除原有的classes文件夹内容和原解压的original包
  • 解压original包 删除META-INF
  • 移动包中内容到classes文件夹

你可能感兴趣的:(SpringBoot 打包文件过大)