Spring:SpringBoot为什么可以使用Jar包启动

SpringBoot 之所以可以使用 Jar 包启动,主要得益于其内置的 Spring Boot Maven 或 Gradle 插件,这些插件在打包过程中进行了一系列的特殊处理,使得打包出来的 Jar 文件不仅仅包含了应用的代码和资源,还包含了所有必需的依赖库(即所谓的“可执行的胖 Jar”或“uber-jar”)。此外,SpringBoot 还利用了 Java 的 Manifest.MF 文件和 Main-Class 属性来指定启动类的位置,以及一个特殊的类加载器来加载 Jar 包内部的依赖库。

以下是具体几个关键点的解释

  • Maven 或 Gradle 插件
    Spring Boot Maven 插件(spring-boot-maven-plugin)或 Spring Boot Gradle 插件(spring-boot-gradle-plugin)在打包过程中,会将项目的所有依赖库以及项目的编译后的类文件打包成一个单一的 Jar 文件。这个 Jar 文件不仅包含了应用的代码,还包含了应用运行所需的所有依赖库。
  • Manifest.MF 文件
    在打包的 Jar 文件中,包含一个名为 META-INF/MANIFEST.MF 的文件,这是 Java 的清单文件,用于存储关于 Jar 文件的信息。Spring Boot 插件会在这个文件中设置 Main-Class 属性,该属性指定了包含 main 方法的类(即应用的启动类)。
    默认情况下,Spring Boot Maven 插件会使用 org.springframework.boot.loader.LaunchedURLClassLoader 类作为启动类加载器,这个类加载器能够处理 Jar 文件内部的依赖库。
  • Spring Boot 的启动器(Starters)
    Spring Boot 提供了大量的启动器(Starters),这些启动器是依赖描述符的集合,可以简化 Maven 或 Gradle 的依赖管理。通过引入启动器,开发者可以很方便地添加项目所需的功能而无需手动指定版本和依赖关系。
  • 嵌入式服务器
    Spring Boot 支持多种嵌入式服务器(如 Tomcat、Jetty、Undertow),这些服务器被打包进 Jar 文件,并在应用启动时自动配置和启动。这使得开发者可以直接运行 Jar 文件来启动一个完整的 Web 应用,而无需在服务器上部署。

综上所述,SpringBoot 使用 Jar 包启动的便利性主要得益于其内置的打包插件、对 Jar 结构的特殊处理以及嵌入式服务器的支持。这些特性使得 SpringBoot 应用可以很容易地打包、分发和运行,从而简化了开发和部署过程。

相关推荐

  1. Spring:SpringBoot为什么可以使用Jar启动

    2024-07-13 13:18:06       25 阅读
  2. shell启动jar 脚本

    2024-07-13 13:18:06       39 阅读
  3. shell脚本启动jar

    2024-07-13 13:18:06       34 阅读
  4. springboot jar编写启动start.sh

    2024-07-13 13:18:06       57 阅读
  5. centos7 后台启动jar

    2024-07-13 13:18:06       31 阅读
  6. Centos 启动jar的详细步骤

    2024-07-13 13:18:06       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 13:18:06       101 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 13:18:06       109 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 13:18:06       87 阅读
  4. Python语言-面向对象

    2024-07-13 13:18:06       96 阅读

热门阅读

  1. ubuntu安装k8s+docker运行英伟达gpu cuda

    2024-07-13 13:18:06       24 阅读
  2. 使用Python绘制百分比堆积柱形图

    2024-07-13 13:18:06       22 阅读
  3. Memcached负载均衡:揭秘高效缓存分发策略

    2024-07-13 13:18:06       25 阅读
  4. Mybatis-SQL注入讲解及#预处理与$的区别

    2024-07-13 13:18:06       25 阅读
  5. 变分法笔记1

    2024-07-13 13:18:06       24 阅读
  6. 将独热码应用到神经网络中

    2024-07-13 13:18:06       26 阅读
  7. SpinalHDL之实用工具(下篇)

    2024-07-13 13:18:06       31 阅读
  8. 【Python实战因果推断】33_双重差分4

    2024-07-13 13:18:06       30 阅读
  9. Android MessageQueue 源码分析

    2024-07-13 13:18:06       17 阅读
  10. ICP经营许可证

    2024-07-13 13:18:06       25 阅读
  11. Archery 之SQL审核系统部署

    2024-07-13 13:18:06       25 阅读