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