为什么SpringBoot的 jar 可以直接运行?

简介: SpringBoot的 jar 可以直接运行的原因

Spring Boot 的 JAR 文件可以直接运行,这是因为 Spring Boot 提供了一个名为 "Spring Boot Executable Jar" 或 "Fat JAR" 的特性。这种 JAR 文件包含了应用程序所需的所有依赖,以及一个特殊的启动器,使得它能够像一个独立的可执行程序一样运行。

以下是 Spring Boot JAR 可以直接运行的几个关键原因:

嵌入式 Web 服务器:Spring Boot 默认集成了嵌入式的 Web 服务器,如 Tomcat、Jetty 或 Undertow。这些服务器被打包在 JAR 文件中,因此应用程序不需要外部 Web 服务器即可运行。
打包所有依赖:Spring Boot 使用 spring-boot-maven-plugin 或 spring-boot-gradle-plugin 插件来构建可执行的 JAR 文件。这些插件会将应用程序的所有依赖(包括 Spring Boot 的依赖和应用程序自身的依赖)一起打包到 JAR 文件的 BOOT-INF/lib 目录下。
启动器(Launcher):Spring Boot 的 JAR 文件包含一个特殊的启动器,通常位于 JAR 文件的根目录下,名为 META-INF/MANIFEST.MF。这个清单文件指定了主类(包含 main 方法的类),并且包含一个启动器,如 org.springframework.boot.loader.JarLauncher,它负责启动应用程序。
自定义类加载器:Spring Boot 的启动器使用了一个自定义的类加载器,它能够从 JAR 文件内部的 BOOT-INF/lib 目录加载应用程序的类和依赖。这使得应用程序的类和依赖可以一起打包在同一个 JAR 文件中,并且可以被正确地加载和执行。
命令行运行:由于 Spring Boot 的 JAR 文件是可执行的,你可以通过简单的命令行指令来运行它,例如:

java -jar myapplication.jar
这个命令会触发启动器,启动器会加载应用程序的主类并执行 main 方法,从而启动整个应用程序。
总结来说,Spring Boot 的 JAR 文件之所以可以直接运行,是因为它包含了所有必要的依赖和一个特殊的启动器,这个启动器能够正确地加载应用程序的类和依赖,并启动应用程序。这种打包方式简化了部署过程,使得应用程序可以轻松地在不同的环境中运行。

目录
相关文章
|
25天前
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
|
30天前
|
Java Maven
构建Springboot项目、实现简单的输出功能、将项目打包成可以执行的JAR包(详细图解过程)
这篇文章详细介绍了构建SpringBoot项目的过程,包括新建工程、选择环境配置、添加依赖、项目结构说明,并演示了如何编写一个简单的Controller控制器实现输出功能,最后讲解了如何使用Maven将项目打包成可执行的JAR包,并提供了运行JAR包的命令和测试效果。
构建Springboot项目、实现简单的输出功能、将项目打包成可以执行的JAR包(详细图解过程)
|
30天前
|
SQL 前端开发 Java
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
这篇文章介绍了如何在IntelliJ IDEA中使用Maven将Spring Boot项目打包成可运行的jar包,并提供了运行jar包的方法。同时,还讨论了如何解决jar包冲突问题,并提供了在IDEA中同时启动Vue前端项目和Spring Boot后端项目的步骤。
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
|
20天前
|
Java Maven C++
【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
|
21天前
|
Java Spring
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)
|
21天前
|
前端开发 JavaScript Java
【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
|
30天前
|
Dubbo Java Nacos
【实战攻略】破解Dubbo+Nacos+Spring Boot 3 Native打包后运行异常的终极秘籍——从零开始彻底攻克那些让你头疼不已的技术难题!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但使用Dubbo+Nacos+Spring Boot 3进行GraalVM native打包后常遇运行异常。本文剖析此问题及其解决策略:确认GraalVM版本兼容性;配置反射列表以支持必要类和方法;采用静态代理替代动态代理;检查并调整配置文件;禁用不支持的功能;利用日志和GraalVM诊断工具定位问题;根据诊断结果调整GraalVM配置。通过系统排查方法,能有效解决此类问题,确保服务稳定运行。
51 0
|
1月前
|
Java Linux Nacos
Java -jar 运行 报 MalformedInputException: Input length = 1
Java -jar 运行 报 MalformedInputException: Input length = 1
17 0
|
1月前
|
Java Windows Spring
Spring Boot CMD 运行日志输出中文乱码
Spring Boot CMD 运行日志输出中文乱码
22 0
|
2月前
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
239 2
[JarEditor]可直接修改jar包的IDEA插件