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.hqwc.cn/news/324869.html

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

相关文章

黑马程序员SpringBoot2-运维实用篇

视频连接&#xff1a;运维实用篇-51-工程打包与运行_哔哩哔哩_bilibili 打包与运行 程序打包与运行&#xff08;Windows&#xff09; 可执行jar包目录结构 左上角的结构是没有插件打包后的结构&#xff0c;左下是安装插件后的结构。 jar包描述文件&#xff08;MANIFEST.MF&a…

2023高级人工智能期末总结

1、人工智能概念的一般描述 人工智能是那些与人的思维相关的活动&#xff0c;诸如决策、问题求解和学习等的自动化&#xff1b; 人工智能是一种计算机能够思维&#xff0c;使机器具有智力的激动人心的新尝试&#xff1b; 人工智能是研究如何让计算机做现阶段只有人才能做得好的…

小型企业网设计-课设实验-爆款实验

可以按照我的配置依次配置&#xff0c;成品打包文件&#xff0c;请&#xff1a;Ensp888 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]un in en Info: Information center is disabled. [Huawei]# [Huawei]sysname SW5 [SW5]# [SW5]vlan batch…

Linux GDB 调试

文章目录 一、Qemu二、Gdbvscode 调试 三、RootFs 一、Qemu qemu 虚拟机 Linux内核学习 Linux 内核调试 一&#xff1a;概述 Linux 内核调试 二&#xff1a;ubuntu20.04安装qemu Linux 内核调试 三&#xff1a;《QEMU ARM guest support》翻译 Linux 内核调试 四&#xff1a;…

应用层网络协议

tags: [“计算机网络”] descripution: “学习应用层的一些常用协议” 网络协议&#xff1a;约定的信息传输的格式&#xff0c;如几个字节是消息头、消息头记录什么信息之类的&#xff1b;c/s架构&#xff1a;不一定是两台计算机&#xff0c;而是两个应用、两个端口工具&#…

苹果系统盘制作

苹果系统盘制作 macOS做系统&#xff0c;有一个macOS系统盘会方便很多&#xff0c;会比联网安装系统快捷不少 准备工作&#xff1a; 1.下载好系统镜像文件 macOS系统下载参考 2.一个U盘&#xff08;最好不低于16G&#xff0c;不要太小了&#xff0c;现在的镜像文件越来约大了…

61.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏红字公告功能的逆向分析

内容来源于&#xff1a;易道云信息技术研究院VIP课 上一节内容&#xff1a;游戏公告功能的逆向分析与测试-CSDN博客 码云地址&#xff08;master分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;63e04cc40f649d10ba2f4f…

线程同步及互斥锁

一、线程同步 1. 线程同步&#xff1a;即当有一个线程在对内存进行操作时&#xff0c;其他线程都不可以对这个内存地址进 行操作&#xff0c;直到该线程完成操作&#xff0c;其他线程才能对该内存地址进行操作&#xff0c;而其他线程则处 于等待状态。 2. 临界区是指访问某…

Kibana

Kibana是一个针对Elastic Search的开源分析及可视化的平台&#xff0c;使用kibana可以查询、查看并与存储在ES索引的数据进行交互操作&#xff0c;可以理解为一个客户端的工具&#xff0c;比如mysql和navicat。 使用kibana能执行高级的数据分析&#xff0c;并能以图表、表格和地…

033 - STM32学习笔记 - TIM定时器(一) - 高级定时器

033 - STM32学习笔记 - TIM定时器&#xff08;一&#xff09; - 高级定时器 上节内容学习了基本定时器&#xff0c;其功能比较简单&#xff0c;配置和使用也比较容易&#xff0c;今天在基本定时器的基础上学习一下高级控制定时器的内容。 在F429上一共有两个高级控制定时器和1…

算法每日一题:队列中可以看到的人数 | 单调栈

大家好&#xff0c;我是星恒 今天是一道困难题&#xff0c;他的题解比较好理解&#xff0c;但是不好想出来&#xff0c;接下来就让我带大家来捋一捋这道题的思路&#xff0c;以及他有什么特征 题目&#xff1a;leetcode 1944有 n 个人排成一个队列&#xff0c;从左到右 编号为 …

【计算机图形学划重点】第一讲-Pipeline and Introduction

基础知识 Vertex&#xff08;顶点&#xff09; define the location of primitives in space, and consists of vertex stream. 顶点用于定义空间中基本图形&#xff08;primitives&#xff09;的位置。它包含了一个顶点流&#xff08;vertex stream&#xff09;&#xff0c…