SpringBoot瘦身打包部署的实现
作者:希尔伯特 发布时间:2021-09-09 16:54:21
一、前言
最近做的项目由于引入第三方库导致在运行mvn clean package 打jar时,编译出来的 Jar 包很大(服务器多达500MB)。
二、瘦身前的Jar包
SpringBoot编译出来的Jar包中,磁盘占用大的,是一些外部依赖库(jar包),例如:
进入项目工程根目录,执行 mvn clean package命令,得到的Jar包目录结构如下:
整个Jar包 524 MB(可以通过解压软件查看,会发现基本都是lib下的依赖包占用)
三、解决方法
步骤1: 正常编译JAR包,解压出lib文件夹
POM文件如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
进入项目根目录,执行命令: mvn clean package
将编译后的Jar包解压,拷贝 BOOT-INF 目录下的lib文件夹 到目标路径;
步骤2: 修改pom.xml配置,编译出不带 lib 文件夹的Jar包
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<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>
配置完成后,再次执行编译:mvn clean package
生成的 Jar 包体积明显变小(还有175KB),如下所示, 外部的 jar 包已经不会被引入了:
步骤3: 运行编译后的Jar包
将 步骤1 解压出来的lib文件夹、步骤2编译的jar包放在同一个目录, 运行下面命令:
java -Dloader.path=/path/to/lib -jar /path/to/springboot-jsp-0.0.1-SNAPSHOT.jar
备注:
将/path/to/改成实际的路径。
-Dloader.path=lib文件夹路径
最终目录文件结构是:
├── lib #lib文件夹
└── springboot-jsp-0.0.1-SNAPSHOT.jar
说明
1、通常,一个工程项目架构确定后,引入的jar包基本上不会变,改变的大部分是业务逻辑;
2、后面如果需要变更业务逻辑,只需要轻量地编译工程,大大提高项目部署的效率。
四、特殊处理
1、以上步骤打包去除所有依赖包,如果想引入内部编译的依赖包可以通过includes属性进行添加,利用引用了内部的dubbo可以通过如下配置
配置完成后,再次执行编译:mvn clean package
结构如下:
2、如果引入内部包过多,也可以通过excludeGroupIds属性去掉不变的依赖包。
来源:https://blog.csdn.net/weixin_35971547/article/details/90521411
猜你喜欢
- 在使用JDBC的时候,数据库据连接是非常宝贵的资源。为了复用这些资源,可以将连接保存在一个队列中。当需要的时候可以从队列中取出未使用的连接。
- 简介Springboot Admin是一个管理和监控Springboot项目的组件,分为服务端和客户端,两端通过http进行通信。由于其轻量
- 近日工程中,逐渐感觉到原来复制粘贴代码的笨重,突然想起以前有人和我说起过Git和SVN之类的版本管理工具。由于平时主要是写Java代码,所以
- Ajax本质上和普通的HTTP请求是一样的,只不过普通的HTTP请求是给人看的,而Ajax请求是给JS代码去用的。所以Ajax请求的页面一般
- 从java14开始, switch语句有了一个很大的调整, 这就让swicth语句有了更多的操作和选择,在代码上,更加的简便灵活.switc
- 测试代码pom.xml:<?xml version="1.0" encoding="UTF-8"
- 前言本文主要给大家介绍的是关于obix协议在java中的配置和使用,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。什么是
- 本文实例讲述了Java基于享元模式实现五子棋游戏功能。分享给大家供大家参考,具体如下:一、模式定义享元模式,以共享的方式高效地支持大量的细粒
- 一、什么是Memcached?Memcached是danga.com开发的分布式内存对象缓存系统,所谓分布式,意味着它不是本地的,而是基于网
- Java中可以使用关键字synchronized进行线程同步控制,实现关键资源顺序访问,避免由于多线程并发执行导致的数据不一致性等问题。sy
- 记录一下使用IDEA创建servlet并使用Tomcat本地部署的过程。需要安装好的软件首先IDEA社区版不支持Java EE,因此要使用U
- 1. 线程转储简介线程转储(Thread Dump)就是JVM中所有线程状态信息的一次快照。线程转储一般使用文本格式, 可以将其保存到文本文
- 很多同学对于overload和override傻傻分不清楚,建议不要死记硬背概念性的知识,要理解着去记忆。  
- 目录Profile用法resourcesfilters多环境配置解决方案Profile用法我们在application.yml中为jdbc.
- 字段策略 0:”忽略判断”,1:”非 NULL 判断”),2:”非空判断”问题描述:当字段策略为 0 “忽略判断” 的时候,如果实体和数据库
- 封面图下个季度的目标是把前端监控相关的内容梳理出来,梳理出来之后可能会在公司内部做个分享~Flutter应用程序既括代码也包括一些其他的资产
- 1 @SpringBootApplication自动配置原理@SpringBootApplication是一个组合注解,主要由@Compon
- 在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较
- 我们在学习接口的时候。能够在里面做一些方法的调用。不过今天所要讲的JDBC,虽然也是连接数据库的一种接口,不过与类接口有着很大的区别,大家要
- 本篇分享的是springboot多数据源配置,在从springboot v1.5版本升级到v2.0.3时,发现之前写的多数据源的方式不可用了