为什么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 文件之所以可以直接运行,是因为它包含了所有必要的依赖和一个特殊的启动器,这个启动器能够正确地加载应用程序的类和依赖,并启动应用程序。这种打包方式简化了部署过程,使得应用程序可以轻松地在不同的环境中运行。

目录
相关文章
|
18天前
|
负载均衡 IDE Java
SpringBoot整合XXL-JOB【04】- 以GLUE模式运行与执行器负载均衡策略
在本节中,我们将介绍XXL-JOB的GLUE模式和集群模式下的路由策略。GLUE模式允许直接在线上改造方法为定时任务,无需重新部署。通过一个测试方法,展示了如何在调度中心配置并使用GLUE模式执行定时任务。接着,我们探讨了多实例环境下的负载均衡策略,确保任务不会重复执行,并可通过修改路由策略(如轮训)实现任务在多个实例间的均衡分配。最后,总结了GLUE模式和负载均衡策略的应用,帮助读者更深入理解XXL-JOB的使用。
29 9
|
3月前
|
Dubbo Java 应用服务中间件
深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案
本文深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案。通过检查GraalVM版本兼容性、配置反射列表、使用代理类、检查配置文件、禁用不支持的功能、查看日志文件、使用GraalVM诊断工具和调整GraalVM配置等步骤,帮助开发者快速定位并解决问题,确保服务的正常运行。
77 1
|
3月前
|
安全 Java 应用服务中间件
如何将Spring Boot应用程序运行到自定义端口
如何将Spring Boot应用程序运行到自定义端口
94 0
|
4月前
|
存储 数据可视化 Java
震惊!如何在linux下部署项目,部署/运行jar包 超详细保姆级教程!
如何在Linux系统下部署和运行Java项目jar包,包括传输文件到Linux、使用nohup命令运行jar包、查看端口状态、杀死进程和查看项目运行状态,以及如何解决“没有主清单属性”的错误。
848 1
震惊!如何在linux下部署项目,部署/运行jar包 超详细保姆级教程!
|
4月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
309 2
|
4月前
|
Java Windows
如何在windows上运行jar包/JAR文件 如何在cmd上运行 jar包 保姆级教程 超详细
本文提供了一个详细的教程,解释了如何在Windows操作系统的命令提示符(cmd)中运行JAR文件。
1580 1
|
6月前
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
|
6月前
|
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 错误消息
107 0
|
6月前
|
Java Spring
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)
|
6月前
|
前端开发 JavaScript Java
【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包