spring boot jar包_「Spring Boot 新特性」 jar 大小自动瘦身

自动分析瘦身

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

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

效果展示

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

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

ab0f36fa6d1fa4bde2fe4b0288ade98e.png
  • 分别解压两个 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
19cd demo-2.4.0/BOOT-INF/lib && ll -h | wc -l
18

什么是 empty starter

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

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

1ce95822ae6ddd20814cac34d3930544.png

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

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

474fe12910fbf7e66f37f01d1f4b966d.png

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

自定义 jar 实现自动瘦身

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

472321a2e49b35672e8b2255f9031296.png

参考资料

[1]

slot-maven-plugin: https://github.com/core-lib/slot-maven-plugin

[2]

start.spring.io: https://start.spring.io


来源:公众号

喜欢的记得点关注哦!!!谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式在项目中的应用案例_设计模式在项目中的应用(初学者版)

文章首发链接&#xff1a;设计模式在项目中的实际应用&#xff08;应试版&#xff09;​mp.weixin.qq.com本文适用于设计模式初学者。很多人学习了设计模式&#xff0c;但在项目开发中仍然不知道如何使用&#xff1b;很多小伙伴在课堂上跟着老师稀里糊涂的听了&#xff0c;懂了…

微创社001期:从0开始创作第一本技术书

互联网已经成为了人们生活中如饮水空气一般的基础设施&#xff0c;它不仅影响着当下我们的生活&#xff0c;也必将在更加普遍的领域影响着我们的未来。而在大浪潮中&#xff0c;坚守一个以自我为中心的知识体系&#xff0c;不仅有助于我们作为个体更好的从互联网汲取养分&#…

关于虚拟机下linux共享Windows文件的解决方案

先跟大家说一下在windows下装的vmware&#xff0c;就是又在vmware的系统里虚拟了一个Linux的系统的话&#xff0c;我们有些朋友就是想法把物理机的东西拷贝到Linux虚拟机里时很是伤神&#xff0c;当然windows就很简单了&#xff0c;直接拖进去&#xff08;如果你安装了vmware t…

10分钟让你快速掌握Excel的16项重要技巧

大家在日常生活、工作使用Excel时&#xff0c;是不是总会遇到很多问题呢? 不小心将文件命名错了&#xff0c;要一个个改&#xff1f; 文件里只需要数据却不知道怎么提取&#xff1f; 工作汇报要做数据汇总、需要插入大量图片怎么办&#xff1f; 甚至在耗费相当多的时间与精力…

linux中wine yum安装,分享|在基于RedHat或Debian的系统上安装 Wine 1.7

Wine,Linux上最流行也是最有力的软件, 可以顺利地在Linux平台上运行Windows程序和游戏。这篇文章教你怎么在像CentOS, Fedora, Ubuntu, Linux Mint一样基于Red Hat和Debian的系统上安装最新的Wine 1.7。在Linux安装 Wine 1.7不幸的, 在基于Red Hat的系统上没有官方的 Wine 仓库…

还不知道这 11 个超酷的编程新工具你就 out 了!

工具对开发人员来说至关重要。工具可以让一个开发人员的日常工作更高效&#xff0c;并且只需要关注最重要的事情。对于开发人员来讲&#xff0c;寻找更好的替代工具往往比坚持使用熟悉过时的工具更困难。 在这篇文章中&#xff0c;我们将列出你在日常工作中能够使用的新的开发工…

Linux装多个apache,windows linux如何安装多个apache?

富国沪深Windows下安装多个Apache服务&#xff1a;1.安装好Apache以后&#xff0c;可以在浏览器中输入http://localhost测试&#xff1b;2.更改第一个站点的根目录&#xff1a;在文件Apache2.2\conf\httpd.conf中查找 DocumentRoot 属性&#xff0c;将后面的路径改为你的主站点…

[Abp 源码分析]DTO 自动验证

点击上方蓝字关注我们0.简介在平时开发 API 接口的时候需要对前端传入的参数进行校验之后才能进入业务逻辑进行处理&#xff0c;否则一旦前端传入一些非法/无效数据到 API 当中&#xff0c;轻则导致程序报错&#xff0c;重则导致整个业务流程出现问题。用过传统 ASP.NET MVC 数…

五分钟搞懂并查集

并查集是我暑假从高手那里学到的一招&#xff0c;觉得真是太精妙的设计了。来看一个实例&#xff0c;杭电1232畅通工程。首先在地图上给你若干个城镇&#xff0c;这些城镇都可以看作点&#xff0c;然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问…

[Abp 源码分析]多语言(本地化)处理

点击上方蓝字关注我们0.简介如果你所开发的需要走向世界的话&#xff0c;那么肯定需要针对每一个用户进行不同的本地化处理&#xff0c;有可能你的客户在日本&#xff0c;需要使用日语作为显示文本&#xff0c;也有可能你的客户在美国&#xff0c;需要使用英语作为显示文本。如…

Kaggle 发布首份数据科学从业报告 | 不及美国同行1/3,中国数据科学家平均年薪约3万美元

Kaggle 是互联网上最著名的数据科学竞赛平台之一&#xff0c;今年 3 月 8 日&#xff0c;这家机构被谷歌收购&#xff0c;6 月 6 日又宣布用户数量超过了 100 万人。互联网创业方兴未艾&#xff0c;人工智能的浪潮又接踵而来&#xff0c;而贯穿其中的数据科学则在这更迭交替中显…

mysql设置表名字为占位符_这可能是把MySQL存储引擎讲解的最清楚的一篇文章了

存储引擎是MySQL的组件&#xff0c;用于处理不同表类型的SQL操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能&#xff0c;使用不同的存储引擎&#xff0c;还可以获得特定的功能。使用哪一种引擎可以灵活选择&#xff0c;一个数据库中多个表可以使用不同引擎…

linux开发板显示横向彩虹,给 Linux 终端的输出添加彩虹特效的命令

原标题&#xff1a;给 Linux 终端的输出添加彩虹特效的命令正文如果认为Linux命令行很无聊并且没有任何乐趣&#xff0c;那么您错了&#xff0c;真实的Linux多么有趣和淘气。在本文&#xff0c;我将介绍一个名为“ lolcat ”的实用小工具&#xff0c;该实用工具在终端中产生彩虹…

Delphi 与 DirectX 之 DelphiX(46): TDIB.DoAntiAlias;

本例效果图:代码文件:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, DIB, StdCtrls;typeTForm1 class(TForm)DXPaintBox1: TDXPaintBox;Button1: TButton;Button2: TButton;procedure Button1Click(Sender: T…

Web API实现微信公众平台开发-服务器验证

背景最近开发微信公众号相关接口&#xff0c;在这里记录下微信公众号相关各项功能的实现。先决条件1、一台可部署web服务的服务器或者云平台&#xff08;本地可以搞个花生壳域名&#xff09;。2、一个可以正常使用的微信公众账号&#xff0c;开始的时候使用它的测试号。3、Visu…

每天20分钟,只需一年,一年级学生英语听力达到六年级水平!关键是坚持一点都不难!

导读&#xff1a; 除了语文数学这种常规科目&#xff0c;最让家长们焦虑的就是英语。现在的孩子&#xff0c;英语启蒙都很早&#xff0c;但是对英语的兴趣总是开始还可以&#xff0c;越往后越没动力和兴趣&#xff0c;稍微遇到点挫折就不想坚持了。钱也花了&#xff0c;好老师也…

python爬取论坛付费内容_Python爬虫抓取论坛关键字过程解析

前言&#xff1a; 之前学习了用python爬虫的基本知识&#xff0c;现在计划用爬虫去做一些实际的数据统计功能。由于前段时间演员的诞生带火了几个年轻的实力派演员&#xff0c;想用爬虫程序搜索某论坛中对于某些演员的讨论热度&#xff0c;并按照日期统计每天的讨论量。 这个项…

相对完善的Java通过JDBC操纵mysql的例子

工具类: Code1import java.sql.Connection; 2import java.sql.DriverManager; 3import java.sql.ResultSet; 4import java.sql.SQLException; 5import java.sql.Statement; 6 7 8public final class JDBCUtils { 910 private JDBCUtils(){}11 12 private static Strin…

如何在 ASP.Net Core 中使用 File Providers

ASP.Net Core 为了便于获取文件和文件夹信息&#xff0c;监视文件变更&#xff0c; 在文件系统中提供了一个抽象层&#xff1a;File Providers&#xff0c; 这篇文章将会讨论如何使用 File Providers 。File Provider 抽象层 file prodivers 实现了 IFileProvider 接口&#xf…

对5种主流编程语言的吐槽

不可否认&#xff0c;想要成为一名优秀的程序员确实是需要掌握多种编程语言。通过这几年的自虐式学习&#xff0c;小编也慢慢的掌握了这些编程语言。接下来要为大家&#xff0c;介绍五款让人又爱又恨的编程语言&#xff01; 1.C 语言 C 语言给人的感觉&#xff0c;就是一位神秘…