Spring Boot 的 JAR 文件可以直接运行,主要得益于以下几点设计和构建特性:
-
可执行 JAR (Executable JAR) 格式: Spring Boot 使用 Maven 或 Gradle 插件(如
spring-boot-maven-plugin或spring-boot-gradle-plugin)将应用程序及其所有依赖项打包成一个单一的、自包含的 JAR 文件,通常被称为“Fat JAR”或“Uber JAR”。这种 JAR 文件不仅包含了应用的类文件,还包含了所有第三方库和配置文件,因此可以独立运行而无需外部依赖。 -
启动脚本与启动器: JAR 文件中包含了一个特殊的启动脚本,由
org.springframework.boot.loader.JarLauncher类实现。这个启动器负责引导 Spring Boot 应用程序的启动过程,它读取 JAR 文件内部的内容,设置类路径,初始化 Spring 容器,并最终启动应用。 -
内嵌 Servlet 容器: Spring Boot 默认内嵌了 Servlet 容器,如 Tomcat、Jetty 或 Undertow,这意味着 Web 应用程序无需独立的服务器就可以运行。这些容器被编译进 JAR 文件中,因此无需在系统中预先安装或配置服务器。
-
自动化配置: Spring Boot 提供了一种自动配置机制,它可以根据约定优于配置的原则,自动设置大多数应用所需的配置。这意味着开发者无需显式配置许多常见的设置,从而简化了开发和部署过程。
-
Manifest 属性: JAR 文件的
MANIFEST.MF文件中指定了Main-Class属性,明确指出 JAR 文件的启动类。这使得 JAR 文件能够被 JVM 识别并直接运行。
结合以上特性,Spring Boot 的 JAR 文件可以像一个简单的可执行程序一样通过 java -jar your-app.jar 命令直接启动,极大地简化了部署和运行过程,提高了开发效率。