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

58 阅读2分钟

Spring Boot 的 JAR 文件可以直接运行,主要得益于以下几点设计和构建特性:

  1. 可执行 JAR (Executable JAR) 格式: Spring Boot 使用 Maven 或 Gradle 插件(如 spring-boot-maven-pluginspring-boot-gradle-plugin)将应用程序及其所有依赖项打包成一个单一的、自包含的 JAR 文件,通常被称为“Fat JAR”或“Uber JAR”。这种 JAR 文件不仅包含了应用的类文件,还包含了所有第三方库和配置文件,因此可以独立运行而无需外部依赖。

  2. 启动脚本与启动器: JAR 文件中包含了一个特殊的启动脚本,由 org.springframework.boot.loader.JarLauncher 类实现。这个启动器负责引导 Spring Boot 应用程序的启动过程,它读取 JAR 文件内部的内容,设置类路径,初始化 Spring 容器,并最终启动应用。

  3. 内嵌 Servlet 容器: Spring Boot 默认内嵌了 Servlet 容器,如 Tomcat、Jetty 或 Undertow,这意味着 Web 应用程序无需独立的服务器就可以运行。这些容器被编译进 JAR 文件中,因此无需在系统中预先安装或配置服务器。

  4. 自动化配置: Spring Boot 提供了一种自动配置机制,它可以根据约定优于配置的原则,自动设置大多数应用所需的配置。这意味着开发者无需显式配置许多常见的设置,从而简化了开发和部署过程。

  5. Manifest 属性: JAR 文件的 MANIFEST.MF 文件中指定了 Main-Class 属性,明确指出 JAR 文件的启动类。这使得 JAR 文件能够被 JVM 识别并直接运行。

结合以上特性,Spring Boot 的 JAR 文件可以像一个简单的可执行程序一样通过 java -jar your-app.jar 命令直接启动,极大地简化了部署和运行过程,提高了开发效率。