Spring:SpringBoot为什么可以使用Jar包启动

news/2024/8/28 23:27:09 标签: spring, spring boot, jar

SpringBoot 之所以可以使用 Jar 包启动,主要得益于其内置的 Spring Boot Maven 或 Gradle 插件,这些插件在打包过程中进行了一系列的特殊处理,使得打包出来的 Jar 文件不仅仅包含了应用的代码和资源,还包含了所有必需的依赖库(即所谓的“可执行的胖 Jar”或“uber-jar”)。此外,SpringBoot 还利用了 Java 的 Manifest.MF 文件和 Main-Class 属性来指定启动类的位置,以及一个特殊的类加载器来加载 Jar 包内部的依赖库。

以下是具体几个关键点的解释

  • Maven 或 Gradle 插件
    Spring Boot Maven 插件(spring-boot-maven-plugin)或 Spring Boot Gradle 插件(spring-boot-gradle-plugin)在打包过程中,会将项目的所有依赖库以及项目的编译后的类文件打包成一个单一的 Jar 文件。这个 Jar 文件不仅包含了应用的代码,还包含了应用运行所需的所有依赖库。
  • Manifest.MF 文件
    在打包的 Jar 文件中,包含一个名为 META-INF/MANIFEST.MF 的文件,这是 Java 的清单文件,用于存储关于 Jar 文件的信息。Spring Boot 插件会在这个文件中设置 Main-Class 属性,该属性指定了包含 main 方法的类(即应用的启动类)。
    默认情况下,Spring Boot Maven 插件会使用 org.springframework.boot.loader.LaunchedURLClassLoader 类作为启动类加载器,这个类加载器能够处理 Jar 文件内部的依赖库。
  • Spring Boot 的启动器(Starters)
    Spring Boot 提供了大量的启动器(Starters),这些启动器是依赖描述符的集合,可以简化 Maven 或 Gradle 的依赖管理。通过引入启动器,开发者可以很方便地添加项目所需的功能而无需手动指定版本和依赖关系。
  • 嵌入式服务器
    Spring Boot 支持多种嵌入式服务器(如 Tomcat、Jetty、Undertow),这些服务器被打包进 Jar 文件,并在应用启动时自动配置和启动。这使得开发者可以直接运行 Jar 文件来启动一个完整的 Web 应用,而无需在服务器上部署。

综上所述,SpringBoot 使用 Jar 包启动的便利性主要得益于其内置的打包插件、对 Jar 结构的特殊处理以及嵌入式服务器的支持。这些特性使得 SpringBoot 应用可以很容易地打包、分发和运行,从而简化了开发和部署过程。


http://www.niftyadmin.cn/n/5559791.html

相关文章

快速排序及归并排序的实现与排序的稳定性

目录 快速排序 一. 快速排序递归的实现方法 1. 左右指针法 步骤思路 为什么要让end先走? 2. 挖坑法 步骤思路 3. 前后指针法 步骤思路 二. 快速排序的时间和空间复杂度 1. 时间复杂度 2. 空间复杂度 三. 快速排序的优化方法 1. 三数取中优化 2. 小区…

.net core appsettings.json 配置 http 无法访问

1、在appsettings.json中配置"urls": "http://0.0.0.0:8188" 2、但是网页无法打开 3、解决办法,在Program.cs增加下列语句 app.UseAntiforgery();

linux命令-基础命令(一)

uname -m 显示机器的处理器架构uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统部件(SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性hdparm -tT /dev/sda 在磁盘上执行测试性读取操作系统信息arch 显示机器的处理器架构uname -m 显示机器的处理器架构una…

WebStorm 2024.1 最新变化 附问卷调查 AI

WebStorm 2024.1 最新变化 问卷调查项目在线AI WebStorm 2024.1 最新变化关键亮点粘性行快速文档改进全行代码补全默认启用的 Vue Language Server适用于 Vue、Svelte 和 Astro 的组件用法*Language Services*(语言服务)微件 框架和技术实验性 TypeScrip…

javaweb学习day5--《HTML篇》Springboot的模块创建、HTML的相关知识点详解

一、前言 从今天开始,就要启动后端的学习了,Springboot会贯穿到底,一定要跟着小编严谨的去搭建Springboot环境,依赖添加的过程可能需要2分钟左右,读者们要耐心等待一下,搭建好Springboot之后才算正式的开始…

刷题记录:LeetCode 925.长按键入

题目: 你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。 你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按…

el-table表格操作列错行处理

解决方法&#xff1a; <style>::v-deep .el-table th.el-table__cell > .cell {white-space: nowrap !important;} </style>

【BUG】已解决:java.lang.IllegalStateException: Duplicate key

已解决&#xff1a;java.lang.IllegalStateException: Duplicate key 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市…