Spring Boot 生成 jar/war包的布局应用

在 Spring Boot 中,"布局应用"(Application Layout)指的是打包生成的可执行 jar 或 war 文件中的内容组织结构。Spring Boot 使用一种特殊的布局来确保打包的应用可以通过 java -jar 命令直接运行,同时内嵌 Servlet 容器(如 Tomcat、Jetty 或 Undertow)也被包含在内,使得应用可以作为一个独立的微服务运行,无需外部的 Servlet 容器。

标准的 Java 应用布局:

在传统的 Java 应用中,一个 jar 文件通常包含以下结构:

js 复制代码
my-application.jar
│
├── META-INF
│   └── MANIFEST.MF
├── com
│   └── example
│       └── MyApplication.class
└── lib
    ├── dependency1.jar
    ├── dependency2.jar
    └── ...
  • META-INF/MANIFEST.MF 文件包含元数据,如主类(Main-Class)。
  • 应用的类文件(如 MyApplication.class)直接包含在 jar 文件的根目录下。
  • 依赖的库(如 dependency1.jardependency2.jar)通常位于 lib 目录下,或者完全分离,需要在运行时通过类路径(classpath)指定。

Spring Boot 的可执行 jar 布局:

Spring Boot 改变了这种布局来支持自包含的、可执行的 jar 文件,这种文件被称为"胖 jar"(Fat Jar)或"超级 jar"(Uber Jar),其结构如下:

vbnet 复制代码
vbnetCopy code
my-spring-boot-application.jar
│
├── META-INF
│   ├── MANIFEST.MF
│   └── ...
├── org
│   └── springframework
│       └── boot
│           └── loader
│               ├── JarLauncher.class
│               ├── WarLauncher.class
│               ├── ...
│
├── BOOT-INF
│   ├── classes
│   │   └── com
│   │       └── example
│   │           └── MyApplication.class
│   │
│   └── lib
│       ├── spring-boot-starter-web-2.3.0.RELEASE.jar
│       ├── my-other-dependency-1.0.0.jar
│       └── ...
│
└── application.properties
  • META-INF/MANIFEST.MF 包含 Spring Boot 特有的元数据,指定了使用 Spring Boot 类加载器框架的启动类(如 JarLauncher)。
  • 应用的类文件被放在 BOOT-INF/classes 目录下。
  • 应用的所有依赖库被放在 BOOT-INF/lib 目录下。
  • Spring Boot 的类加载器框架相关的类位于 org/springframework/boot/loader 下,这些类负责正确地加载 BOOT-INF 下的类和库。

为什么需要这种特殊布局:

这种特殊的布局允许 Spring Boot 应用将自己的类和第三方库隔离开来,避免了类路径冲突的问题,并确保了应用可以作为一个独立的单元被运行。这种布局使得部署和分发 Spring Boot 应用变得非常简单,因为所有需要的东西都被封装在一个文件内,无需额外的配置或外部依赖。

相关推荐
悟空码字11 小时前
Spring Boot 整合 MongoDB 最佳实践:CRUD、分页、事务、索引全覆盖
java·spring boot·后端
皮皮林5512 天前
拒绝写重复代码,试试这套开源的 SpringBoot 组件,效率翻倍~
java·spring boot
用户908324602735 天前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
用户8307196840825 天前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
Java水解5 天前
Spring Boot 视图层与模板引擎
spring boot·后端
Java水解5 天前
一文搞懂 Spring Boot 默认数据库连接池 HikariCP
spring boot·后端
洋洋技术笔记6 天前
Spring Boot Web MVC配置详解
spring boot·后端
初次攀爬者6 天前
Kafka 基础介绍
spring boot·kafka·消息队列
用户8307196840826 天前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
Java水解6 天前
SpringBoot3全栈开发实战:从入门到精通的完整指南
spring boot·后端