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 应用变得非常简单,因为所有需要的东西都被封装在一个文件内,无需额外的配置或外部依赖。

相关推荐
LUCIAZZZ40 分钟前
钉钉机器人-自定义卡片推送快速入门
java·jvm·spring boot·机器人·钉钉·springboot
Pitayafruit1 小时前
跟着大厂学架构01:如何利用开源方案,复刻B站那套“永不崩溃”的评论系统?
spring boot·分布式·后端
雨果talk5 小时前
Spring Boot集成Mina的Socket资源管理:从稳定通信到高性能优化
spring boot·后端·性能优化
雨果talk5 小时前
【一文看懂多模块Bean初始化难题】Spring Boot多模块项目中的Bean初始化难题:包名不一致的优雅解决方案
java·spring boot·后端·spring·springboot
码不停蹄的玄黓9 小时前
JUC核心解析系列(五)——执行框架(Executor Framework)深度解析
java·jvm·spring boot·spring cloud
慕木兮人可9 小时前
关于阿里云-云消息队列MQTT的连接和使用,以及SpringBoot的集成使用
spring boot·物联网·mqtt·阿里云·云计算
Q_Q51100828510 小时前
python+django/flask成都奥科厨具厂产品在线销售系统
vue.js·spring boot·python·django·flask·node.js·php
虎鲸不是鱼10 小时前
Spring Boot3流式访问Dify聊天助手接口
java·spring boot·后端·大模型·llm
武子康11 小时前
Java-46 深入浅出 Tomcat 核心架构 Catalina 容器全解析 启动流程 线程机制
java·开发语言·spring boot·后端·spring·架构·tomcat
Q_Q51100828513 小时前
python+django/flask+uniapp宠物中心信息管理系统app
spring boot·python·django·flask·uni-app·node.js·php