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

于大圣 于大圣     2022-12-11     369

关键词:

前言:在打包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作为原始文件;

以上,完了!

 

错误:pg_repack 失败并出现错误:错误:列“relhasoids”不存在

】错误:pg_repack失败并出现错误:错误:列“relhasoids”不存在【英文标题】:ERROR:pg_repackfailedwitherror:ERROR:column"relhasoids"doesnotexist【发布时间】:2020-09-0907:36:44【问题描述】:我正在使用pg_repack扩展对我的数据库表执行完... 查看详情

git gc --aggressive vs git repack

】gitgc--aggressivevsgitrepack【英文标题】:【发布时间】:2015-04-2712:19:38【问题描述】:我正在寻找减小git存储库大小的方法。大多数情况下,搜索会将我带到gitgc--aggressive。我还读到这不是首选方法。为什么?如果我正在运行gc--ag... 查看详情

pg_repackbloat处理测试初步

一、软件安装1.软件需求:postgresql-9.5.2.tar.gzpg_repack-1.3.4.zip2.安装pg_repack[[email protected]pg_repack-1.3.4]#exportPATH=/opt/pgsql/9.5.2/bin:$PATH[[email protected]pg_repack-1.3.4]#exportLD_LIBRAR 查看详情

rpmbuild打包过程控制,禁用“brp-java-repack-jars”

rpmbuild打包有一个过程是这样的:/usr/lib/rpm/redhat/brp-compress  /usr/lib/rpm/redhat/brp-strip /usr/bin/strip  /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip   查看详情

第一章--环境搭建

...从github上下载了源码,然后导入项目后,缺少spring-cglib-repack-3.2.5.jar和spring-objenesis-repack-2.6.jar这两个jar包。  网上很多解决办法都是从spring-core中解压找到对应的cglib和objenesis,然后使用jar命令来生成jar包。  但,后来发现... 查看详情

spring源码深度解析-《源码构建》

1、导入spring-framework-3.2.x\\spring-beans之前先导入源码spring-framework-3.2.x\\spring-core,否则报错:2、导入spring-asm-repack-5.0.4.jar和spring-cglib-repack-3.1.jarhttps://blog.csdn.net/baidu_19473529/article/details/ 查看详情

spring源码导入到idea中

参考文档:https://www.jianshu.com/p/6d957ef0184d使用第二种情况IntelliJIDEA搭建Spring源码阅读环境https://blog.csdn.net/yjteilz/article/details/53906368spring源码构建时缺失spring-cglib-repack和spring-objenesis-repack的正确处理姿势 查看详情

spring源码工程导入eclsipse缺少两个jar文件

按照《Spring源码深度解析》所述,使用gradlecleanideaeclipse将Spring源码转为eclipse工程后,导入eclipse,最后发现还是缺少spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar这两个文件,解决方法:http://blog.csdn.net/z983191625/article/detai 查看详情

java创建对象方式(代码片段)

...t;<groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.6</version><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><... 查看详情

java创建对象方式(代码片段)

...t;<groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.6</version><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><... 查看详情

java创建对象方式(代码片段)

...t;<groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.6</version><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><... 查看详情

java创建对象方式(代码片段)

...t;<groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.6</version><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><... 查看详情

perconapostgresql11分支即将发布release稳定版

...分支基线包括一些帮助管理PostgreSQL的工具:  Pg_repack:重建PGdatabase对象  Pgaudit:提供详细的会话或者审计日志  Patroni:PG的一个HA工具  其他一些contri 查看详情

struts2+spring+hibernate整合步骤《开源》

...此文件 struts-spring-plugin-2.x.x.jar ---用于struts2继承spring的插件  hibernate核心安装包下的(下载路径:http://www.hibernate.org/,点击HibernateCore右边的download) hibernate2.jar lib\\bytecode\\hibernate-cglib-repack-2.1_3.jar lib\\required\... 查看详情

autodeskautocadelectrical2020win641dvd3d设计软件

WinCanVX1.2018.4.1污水管网故障检测分析软件GeoStruRSL-III2019.20.5.541repack1CD地震响应水平评估NIDataManagementSoftwareSuite2018SP11DVD数据管理软件套件SnopsysPrimeTimeStandAlonetoolvP-2019.03Linux1DVD静态时序分析软件Zuken.CR5000.Board.De 查看详情

[roc-rk3568-pc]手把手教你在linux下解包与打包ubuntu系统固件(代码片段)

...;文章目录1、准备工具2、Ubuntu固件下载3、使用firefly-linux-repack工具解包与打包写到最后1、准备工具工欲善其事,必先利其器,为了尽可能避免发生奇怪的错误,我在这里列举一下大家需要用到的工具:PC机:Ub... 查看详情

android插件化hook插件化框架(创建插件应用|拷贝插件apk|初始化插件包|测试插件dex字节码)(代码片段)

Android插件化系列文章目录【Android插件化】插件化简介(组件化与插件化)【Android插件化】插件化原理(JVM内存数据|类加载流程)【Android插件化】插件化原理(类加载器)【Android插件化】“插桩式“插件化框架(原理与实现思路)【Android... 查看详情

android插件化hook插件化框架(hook插件化原理|插件包管理)(代码片段)

Android插件化系列文章目录【Android插件化】插件化简介(组件化与插件化)【Android插件化】插件化原理(JVM内存数据|类加载流程)【Android插件化】插件化原理(类加载器)【Android插件化】“插桩式“插件化框架(原理与实现思路)【Android... 查看详情