⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 lizhou.blog.csdn.net/article/details/108399327 「Asurplus」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

一、背景

SpringBoot 为我们快速开发提供了很好的架子,使得我们只需要少量配置就能开始我们的开发工作,但是当我们需要打包上传部署时,却是很神伤的一个问题,因为打出来的 Jar 包少则十几兆,多则一百来兆,我们需要上传至公网服务器时,是非常慢的,这就引出了今天的主题,SpringBoot项目Jar包如何瘦身部署

1、思路

分析 jar,我们可以看出,jar 包里面分为以下三个模块

分为 BOOT-INFMETA-INF,org 三个部分,打开 BOOT-INF

可以看到有 classes,lib 两个文件夹,我们编译好的代码是放在 classes 里面的,而我们所依赖的 jar 包都是放在 lib 文件夹下

classes 部分是非常小的(我的是3M左右),lib部分是非常大的(我的是70M左右),所以上传很慢

那我们可以将我们自己写的代码部分与所依赖的 maven jar 包部分拆开上传,每次只需要上传我们自己写的代码部分即可

二、瘦身部署

1、正常打包

首先,我们项目的 pom.xml 文件中的打包方式如下:

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

这是 SpringBoot 中默认的打包方式,我们先按照这种方式打包出来,得到一个 jar 包,我们将 jar 包解压,如果不能直接解压,则将后缀改为 zip 再进行解压,我们只需要拿到 BOOT-INF 中的 lib 目录即可

2、改变打包方式

我们对 SpringBoot 中默认的打包方式做一些配置

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.zyxx.DeclareApplication</mainClass>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

  • mainClass,我们指定了项目的启动类
  • layout,我们指定了打包方式为 ZIP,注意:一定是大写的
  • includes,有自己的依赖 jar,可以在此导入
  • repackage,剔除其它的依赖,只需要保留最简单的结构

3、再次打包

我们再次点击maven package,得到一个 jar 包,可以看到此时的 jar 包只有几兆了

三、上传启动

我们将 lib 目录,以及最后打包的瘦身项目 jar 包,上传至服务器,目录如下

使用命令

nohup java -Dloader.path=./lib -jar ./sbm-0.0.1-SNAPSHOT.jar &

  • -Dloader.path,告诉它所依赖的 maven jar 包位置
  • sbm-0.0.1-SNAPSHOT.jar,项目 jar 包的名字
  • nohup、&,使得 jar 包在服务后台运行

四、总结

使用瘦身部署,方便每次的迭代更新,不用每次都上传一个很大的 jar 包,从而节省部署时间

文章目录
  1. 1. 一、背景
    1. 1.0.1. 1、思路
  • 2. 二、瘦身部署
    1. 2.0.1. 1、正常打包
    2. 2.0.2. 2、改变打包方式
    3. 2.0.3. 3、再次打包
  • 3. 三、上传启动
  • 4. 四、总结