自动分析瘦身

Spring Boot 项目最终构建处理 JAR 包大小一直是个诟病,需要把所有依赖包内置最终输出可运行的 jar。 当然可以使用其他的插件扩展 实现依赖 JAR 和 可运行 jar 分离可以参考 slot-maven-plugin, 但此种方法治标不治本并不能减少原有依赖的 JAR 的大小。

Spring Boot 2.4 提供对构建输出 JAR 分析自动瘦身的功能,自动在构建输出可运行 JAR 时删除 empty starter dependencies

效果展示

先来分别基于 Spring Boot 2.4.0 和 Spring Boot 2.3.6 来构建一个可运行的 jar ,再来聊什么是 empty starter

  • 使用 start.spring.io 创建一个空的 Spring Boot 项目,注意不需要引入任何依赖
  • mvn clean install 构建出来相关可运行 jar

  • 分别解压两个 jar 到两个不同的目录
tar -zxvf demo-2.3.6.jar -C demo-2.3.6/

tar -zxvf demo-2.4.0.jar -C demo-2.4.0/
  • 统计依赖 jar 个数, 2.3.6 共计 19 个 依赖 jar 而 2.4.0 只有 18 个依赖 jar ,缺少了 spring-boot-starter.jar
cd demo-2.3.6/BOOT-INF/lib && ll -h | wc -l
19 cd demo-2.4.0/BOOT-INF/lib && ll -h | wc -l
18

什么是 empty starter

如上文所述,我们在基于 start.spring.io 创建项目的时候 已经默认引入了, 但在 Spring Boot 2.4 中会自动删除此类 empty starter dependencies jar

    <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

我们来看一下 spring-boot-stater 有什么特殊性?

  • ① 空 jar 不包含任何代码
  • ② 有引用其他 jar,只为批量导入其他 jar

所以此类型 jar 在构建成可运行 jar 时并未实际意义,因为批量导入的依赖 jar 都可以被引入。目前 spring boot 提供的 redisamqp等大部分 starter 均是此类 jar,所以在构建后会自动删除。

自定义 jar 实现自动瘦身

  • 创建 MANIFEST.MF jar 包元信息,添加一行 Spring-Boot-Jar-Type: dependencies-starter 即可
resources
├── META-INF
   └── MANIFEST.MF

项目推荐: Spring Cloud 、Spring Security OAuth2的RBAC权限管理系统 欢迎关注

「SpringBoot2.4新特性」jar自动瘦身的更多相关文章

  1. SpringBoot Jar包瘦身 - 跟大文件说再见!

    前言 SpringBoot部署起来配置非常少,如果服务器部署在公司内网,上传速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼.就是 编译出来的 Jar 包很大,如果工程引入了许多开 ...

  2. springboot 打包插件去除jar包瘦身

    1.pom文件配置 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>s ...

  3. maven war包打包去除jar包瘦身

    1.pom文件配置 <!-- war包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> ...

  4. [置顶] Kubernetes1.7新特性:新增自动伸缩条件和参数

    一.核心概念 Horizontal Pod Autoscaling,简称HPA,是Kubernetes中实现POD水平自动伸缩的功能.云计算具有水平弹性的特性,这个是云计算区别于传统IT技术架构的主要 ...

  5. 「Spring Boot 2.4 新特性」一键构建Docker镜像

    背景 在我们开发过程中为了支持 Docker 容器化,一般使用 Maven 编译打包然后生成镜像,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便.docker-maven-plugi ...

  6. 「Spring Boot 2.4 新特性」启动耗时详细监控

    背景 Spring Boot 项目随着项目开发过程中引入中间件数量的增加,启动耗时 逐渐增加. 笔者在 <Spring Boot 2.4.0 正式 GA,全面拥抱云原生>文章评论下发现了 ...

  7. 「新特性」Spring Boot 全局懒加载机制了解一下

    关于延迟加载 在 Spring 中,默认情况下所有定的 bean 及其依赖项目都是在应用启动时创建容器上下文是被初始化的.测试代码如下: @Slf4j @Configuration public cl ...

  8. 原创 Spring Boot 2.3 新特性分层JAR

    背景 在我们实际生产容器化部署过程中,往往会遇到 Docker 镜像很大,部署发布很慢的情况 影响 docker 镜像大小的因素,主要有以下三个方面: 基础镜像的大小 .尽量选择 aphine 作为基 ...

  9. 11g新特性-如何禁用自动统计信息收集作业

    一.11g中auto stats gather job被集成到了auto task中. SQL> select client_name,status from DBA_AUTOTASK_CLIE ...

随机推荐

  1. 利用Metasploit 打入ThinkPHP内网...

    出品|MS08067实验室(www.ms08067.com) 本文作者:dch(Ms08067实验室 SRSP TEAM小组成员) 一.利用Metasploit进行攻击的流程图   Metasploi ...

  2. C++算法代码——Sumsets[uva10125]

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1278 题目描述 给你一个整数的集合S(里面所有的整数均不相同),请你找出最大的 d, ...

  3. Simple: SQLite3 中文结巴分词插件

    一年前开发 simple 分词器,实现了微信在两篇文章中描述的,基于 SQLite 支持中文和拼音的搜索方案.具体背景参见这篇文章.项目发布后受到了一些朋友的关注,后续也发布了一些改进,提升了项目易用 ...

  4. Java 优雅地退出程序

    本文转载自Java 优雅地退出程序 导语 很多情况下,我们的程序需要在操作系统 后台 一直运行,这在程序代码里的实现就是用死循环 ( while (true) ) 来实现的.但是,这样会出现一个问题, ...

  5. JUC学习

    JUC是java.util.concurrent包 并发编程的工具包 并发.并行 并发:多线程操作一个资源 并行:多人一起走 并发编程的本质:充分利用cpu的资源 线程的几个状态 新建 运行 堵塞 等 ...

  6. vue中将分号去掉,将双引号变为单引号的配置

    在项目根目录下创建.prettierrc文件,文件内容如下: { "semi": false, "singleQuote": true } 实现vs code中 ...

  7. MySQL如何搭建主库从库(Docker)

    目录 MySQL主从搭建 一.主从配置原理 二.操作步骤 1.创建主库和从库容器 2.启动主从库容器 3.远程连接并操作主从库 4.测试主从同步 MySQL主从搭建 一.主从配置原理 mysql主从配 ...

  8. 基于【腾讯云函数】/【GitHub Actions】/【Docker】的每日签到脚本(支持多账号使用)

    每日签到集合 基于[腾讯云函数]/[GitHub Actions]/[Docker]的每日签到脚本 支持多账号使用 特别声明: 本仓库发布的脚本及其中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究 ...

  9. QuickBase64 - Android 下拉通知栏快捷base64加解密工具

    Android Quick Setting Tile Base64 Encode/Decode Tool Android 下拉通知栏快捷 base64 加解密,自动将剪切板的内容进行 base64 E ...

  10. python分离不同后缀名的文件

    功能描述 根据文件后缀名处理文件,分别拷贝到对应的文件夹下 example >>> .jpg 后缀 和.mp4 后缀文件处理 代码实现 #!/usr/bin/env python # ...