自动分析瘦身

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
  • 分别解压两个 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>

我们来看一下 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

参考资料

[1]

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

[2]

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

来源:公众号

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

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

  1. springboot项目打成可依赖jar包_用IDEA把SpringBoot项目打成jar发布项目

    打包发布 打包前确保项目在IDEA上能正常运行 Project Structure 快捷键 ctrl + shift + alt + s 或点击左上角 File -> Project Struc ...

  2. java jdbc jar包_通过 Spring 框架如何进行JDBC操作呢?

    Spring 整合 JDBC 的方式 添加依赖 编写配置文件 db.properties bean.xml 配置修改 配置数据源 模板类配置 测试整合结果 案例实操 添加依赖 数据库驱动 jar 包 ...

  3. java项目删除多余jar包_清理java项目中多余的jar包

    随着应用规模的逐渐增大,依赖的jar包数量也大幅增加,其中不乏多余的,用不到的 jar包,占用了大量的宝贵空间.通过loosejar这个工具,便可轻松找到"滥竽充数"的jar包了~ ...

  4. gradle 项目打包成多个jar包_永不失优雅——高效管理Springboot项目

    猿灯塔 全文略长 希望能帮到各位 另外!文末有你们想要的白嫖惊喜哦! 本文主要讲述一下如何优雅地管理SpringBoot项目. 第一种方式:使用SHELL脚本 As we known 作为一个后端程序 ...

  5. 常用jar包_发布Maven包的正确姿势

    本文介绍如何把自己写的Maven包发布到公开仓库/中央仓库/私有仓库. 当我们使用commons-logging这些第三方开源库的时候,我们实际上是通过Maven自动下载它的jar包,并根据其pom. ...

  6. flink sql udf jar包_编写Hive的UDF(查询平台数据同时向mysql添加数据)

    可能会有一些截图中会有错误提示,是因为本地的包一直包下载有问题,截完图已经下载好了. 创建包结构 创建一个基础信息类 所有输出到mysql数据库中的自定义MR任务的自定义key均需要实现该抽象类 代码 ...

  7. java jdbc jar包_大数据从入门到深入:JavaEE 之 数据库技术 JDBC(1)

    1章 JDBC 1.1 JDBC概述 JDBC(Java DataBase Connectivity,java动态数据 库连接技术)是一种用于执行SQL语句的Java API : Applicatio ...

  8. was服务器里面jar包_如何在was中解决jar包冲突

    如何在 was 中解决 jar 包冲突 大型的基于 WebSphere 的项目开发中,同一个 WebSphere Application Server (以下 简称 WAS ) 上会部署多个应用程序, ...

  9. java -jar 运行jar包_用java –jar 命令运行Jar包

    用java –jar 命令运行Jar包 摘要 这个技巧阐明了如何不直接处理清单文件而将一个不能运行jar包转换成一个可以执行的jar包.学会如何写一段转换jar包的程序,将你的jar包转换成你能使用j ...

最新文章

  1. STM32 中malloc实际调用
  2. AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML)
  3. 【Netty】mmap 和 sendFile 零拷贝原理
  4. 车用TVS管 SM8S系列 国产替代
  5. 深度学习(四十三)——深度强化学习(6)AlphaGo全系列
  6. P3243 [HNOI2015]菜肴制作(拓扑排序、贪心)
  7. 【渝粤教育】电大中专混凝土结构作业 题库
  8. JSP 文件上传下载系列之一[基本方式上传文件]
  9. vue使用FlexPaperViewer插件 预览swf文件 pdf转swf文件
  10. flash 文件计算机课件,计算机软件及应用Flash.ppt
  11. 正则匹配emoji字符
  12. Endnote X6大客户版破解版+新功能介绍+视频介绍
  13. js统计html页面访问的次数,JavaScript实现网站访问次数统计代码
  14. E212: Can‘t open file for writing:权限不够或者没有上级目录
  15. Spring Boot启动之Hello World
  16. 评论:后MWC2012的一些感悟
  17. c语言您的验证码代码,c国际短信接口_c国际验证码接口_c国际手机验证接口_国际短信代码示例_达信通...
  18. Linux 音频驱动(五) ALSA音频驱动之PCM逻辑设备
  19. 宝塔使用心得--快速部署javaweb应用
  20. html+css (静态页面+动画案例)

热门文章

  1. Postgresql快速写入\/读取大量数据(.net)
  2. Git,Git Flow,GitLab使用指南
  3. 在收购 Sun 的六年后,Oracle 终于瞄准了 Java 的非付费用户
  4. 在ASP.NET Core中实现一个Token base的身份认证
  5. 升级ASP.Net Core项目
  6. Python3.6学习笔记(三)
  7. 华为电视鸿蒙系统好用吗,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  8. socket.io服务端是java_SpringBoot(23) 集成socket.io服务端和客户端实现通信
  9. 撩妹学会这一招,就没有人能拒绝你!
  10. 现在女生的床真的都是这样吗?