欢迎大家来到IT世界,在知识的湖畔探索吧!
用大白话解释Spring Boot的jar为什么可以直接运行,其实就三点核心原理:
一、核心原理
1. 内嵌了一个“迷你服务器”
Spring Boot的jar包里,自带了一个简化版的Tomcat(或其他服务器,如Jetty)。
传统方式:你的代码打包成war文件 → 扔到外部的Tomcat里运行。
Spring Boot:直接把Tomcat和你代码、依赖库一起打包成jar → 不需要外部服务器,自己就是一个“独立应用”。
2. 打包方式特殊:Fat Jar(胖罐子)
普通jar包只包含你的代码和资源文件,但Spring Boot的jar 是“胖罐子”:
包含所有依赖:比如Spring、Tomcat、数据库驱动等第三方库,全部塞进jar里。
启动入口特殊:通过META-INF/MANIFEST.MF文件中的 Main-Class,指向Spring Boot的Launcher类,而不是你的主类。
Main-Class: org.springframework.boot.loader.JarLauncher
3. 启动流程简化:Launcher代理
当你运行java -jar app.jar时:
JVM先执行JarLauncher:Spring Boot的Launcher会做两件事:加载内嵌的Tomcat:启动一个轻量级的Web服务器;加载你的代码:找到@SpringBootApplication注解的主类,初始化Spring容器。
你的应用启动:就像传统 Spring MVC项目在外部Tomcat 里运行一样,但这次是“内置”的。
二、对比传统方式
|
传统项目 |
Spring Boot项目 |
|
打包成war文件 |
打包成jar文件(自带服务器) |
|
需要安装Tomcat,部署到 webapps目录 |
直接java -jar运行,无需安装任何服务器 |
|
启动命令:startup.sh |
启动命令:java -jar app.jar |
三、技术细节补充
如何打包?
使用spring-boot-maven-plugin插件,它会自动把依赖和内嵌服务器打进jar。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
为什么普通jar不能直接运行?
普通jar没有内嵌服务器,也没有Launcher引导启动流程,依赖库也不在jar里。
四、总结
Spring Boot的jar能直接运行,是因为它把服务器、依赖、代码全打包成一个“独立安装包”,像手机上的APP一样,点开就能用,不用再装其他环境。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/135509.html