当前位置: 首页 > news >正文

spring-boot-maven插件repackage(goal)的那些事

前言:在打包Springboot项目成jar包时需要在pom.xml使用spring-boot-maven-plugin来增加Maven功能,在我的上一篇博客<<Maven生命周期和插件的那些事(2021版)>>中已经介绍过Maven和插件的关系,在此不再赘述,感兴趣的小伙伴可以点击链接了解下。那么到底spring-boot-maven插件到底增加了哪些功能并没有深入探讨,下面针对Maven的package命令,分使用和不适用spring-boot-maven插件两种情境下的控制台输出和jar包组成简单讨论下。

以下两张图的文字描述和控制台输出可以得出:运行mvn package命令时,使用spring-boot-maven插件的打包过程比没有使用spring-boot-maven插件多了一次repackage过程,下面简单记录下repackage到底干了哪些工作?

一、首先对比下打包的成果物:

可以发现使用spring-boot-maven-plugin插件的比没有使用的场景,多了一个以.original结尾的文件,且该文件的大小与没使用spring-boot-maven插件打包的jar文件大小一样。下面对这两个大小一样的文件解压缩,解压后内容如下,可以看到解压后的内容无论是大小还是目录结构以及目录下的内容都一样。

对此我们可以得出第一个结论:spring-boot-maven-plugin的package(goal)将Maven的package命令默认实现(jar:jar)打包的重命名为XXX.jar.original

二、下面开始分析由spring-boot-maven插件打包的jar包结构如下:

BOOT-INF目录下有两个子目录:classes和lib目录。lib目录存放的是应用依赖的jar包,具体参照Maven的pom.xml中的依赖内容。classes目录下存放的是项目CLASS_PATH下的内容,包括应用代码和配置文件(比如application.yml等),可以理解为repackage将原始Maven打包的jar文件中的除META-INF以外的内容放置到该目录下打包。

META-INF目录下存放的是应用相关的元信息,比如JAR包的必要配置文件MANIFEST.MF和Maven的配置文件等。

org目录下放置的与springboot应用jar加载和启动相关的类,后期会有博客专门讲解springboot应用的启动过程,会重点分析spring-boot-loader的。

根据以上控制台日志输出以及有无spring-boot-maven插件下打包形成的jar包组成可以推断,spring-boot-maven插件的repackage(goal)有如下两个作用:

1、在原始Maven打包形成的jar包基础上,进行重新打包,新形成的jar包不但包含应用类文件和配置文件,而且还会包含应用所依赖的jar包以及Springboot启动相关类(loader等),以此来满足Springboot独立应用的特性;

2、将原始Maven打包的jar重命名为XXX.jar.original作为原始文件;

以上,完了!

http://www.lryc.cn/news/274191.html

相关文章:

  • ubuntu的boot分区被删除恢复
  • 【userfaultfd 条件竞争】starCTF2019 - hackme
  • 深度学习中的自动化标签转换:对数据集所有标签做映射转换
  • c语言-函数指针
  • conda
  • 【Vue】灵魂拷问
  • Scrapy 1.3.0 使用简介
  • 单机+内部备份_全备案例
  • 【kettle】pdi/data-integration 打开ktr文件报错“Unable to load step info from XML“
  • cocos creator人开发小游戏免费素材资源
  • 除了sd webui,compfy还有一个sd UI
  • c++属于同一个类的不同对象之间可相互访问private和protected成员
  • QT/C++ 远程数据采集上位机+服务器
  • 算法每日一题:保龄球游戏的获胜者
  • Do you know about domestic CPUs
  • 软件设计模式 --- 类,对象和工厂模式的引入
  • LeetCode74二分搜索优化:二维矩阵中的高效查找策略
  • 三极管组成的光控开关电路原理图
  • 【PostgreSQL】从零开始:(四十二)系统列
  • 快速、准确地检测和分类病毒序列分析工具 ViralCC的介绍和详细使用方法, 附带应用脚本
  • DNs服务学习笔记
  • 获取线程池中任务执行数量
  • RK3566 Android 11平台上适配YT8512C 100M PHY
  • docker 部署haproxy cpu占用特别高
  • Oracle导出CSV文件
  • 图像分割实战-系列教程12:deeplab系列算法概述
  • 数据库02-07 存储
  • WPF 入门教程DispatcherTimer计时器
  • 【教学类-43-04】20231229 N宫格数独4.0(n=2,4,6,8) (ChatGPT AI对话大师生成 回溯算法)
  • WPF美化ItemsControl1:不同颜色间隔