SpringBoot生成jar/war包的布局應(yīng)用
在 Spring Boot 中,"布局應(yīng)用"(Application Layout)指的是打包生成的可執(zhí)行 jar 或 war 文件中的內(nèi)容組織結(jié)構(gòu)。Spring Boot 使用一種特殊的布局來確保打包的應(yīng)用可以通過 java -jar 命令直接運(yùn)行,同時(shí)內(nèi)嵌 Servlet 容器(如 Tomcat、Jetty 或 Undertow)也被包含在內(nèi),使得應(yīng)用可以作為一個(gè)獨(dú)立的微服務(wù)運(yùn)行,無需外部的 Servlet 容器。
標(biāo)準(zhǔn)的 Java 應(yīng)用布局:
在傳統(tǒng)的 Java 應(yīng)用中,一個(gè) jar 文件通常包含以下結(jié)構(gòu):
my-application.jar
│
├── META-INF
│ └── MANIFEST.MF
├── com
│ └── example
│ └── MyApplication.class
└── lib
├── dependency1.jar
├── dependency2.jar
└── ...
META-INF/MANIFEST.MF文件包含元數(shù)據(jù),如主類(Main-Class)。- 應(yīng)用的類文件(如
MyApplication.class)直接包含在 jar 文件的根目錄下。 - 依賴的庫(kù)(如
dependency1.jar、dependency2.jar)通常位于lib目錄下,或者完全分離,需要在運(yùn)行時(shí)通過類路徑(classpath)指定。
Spring Boot 的可執(zhí)行 jar 布局:
Spring Boot 改變了這種布局來支持自包含的、可執(zhí)行的 jar 文件,這種文件被稱為“胖 jar”(Fat Jar)或“超級(jí) jar”(Uber Jar),其結(jié)構(gòu)如下:
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 特有的元數(shù)據(jù),指定了使用 Spring Boot 類加載器框架的啟動(dòng)類(如JarLauncher)。- 應(yīng)用的類文件被放在
BOOT-INF/classes目錄下。 - 應(yīng)用的所有依賴庫(kù)被放在
BOOT-INF/lib目錄下。 - Spring Boot 的類加載器框架相關(guān)的類位于
org/springframework/boot/loader下,這些類負(fù)責(zé)正確地加載BOOT-INF下的類和庫(kù)。
為什么需要這種特殊布局:
這種特殊的布局允許 Spring Boot 應(yīng)用將自己的類和第三方庫(kù)隔離開來,避免了類路徑?jīng)_突的問題,并確保了應(yīng)用可以作為一個(gè)獨(dú)立的單元被運(yùn)行。這種布局使得部署和分發(fā) Spring Boot 應(yīng)用變得非常簡(jiǎn)單,因?yàn)樗行枰臇|西都被封裝在一個(gè)文件內(nèi),無需額外的配置或外部依賴。
以上就是SpringBoot生成jar/war包的布局應(yīng)用的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot生成jar/war包的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Reactor如何優(yōu)雅Exception異常處理
初識(shí)響應(yīng)式編程的時(shí)候,除了從命令式的思維方式轉(zhuǎn)變?yōu)楹瘮?shù)式的編程方式外,其中有一個(gè)很大的不適應(yīng)的地方就是在面對(duì)異常時(shí)該怎么處理。本文將通過Project?Reactor的文檔以及源碼來深入解讀,在reactor中是如何優(yōu)雅地實(shí)現(xiàn)這異常處理三板斧,希望對(duì)大家有所幫助2023-02-02
springboot內(nèi)置tomcat之NIO處理流程一覽
這篇文章主要介紹了springboot內(nèi)置tomcat之NIO處理流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
IDEA插件之彩虹括號(hào)Rainbow?Brackets使用介紹
這篇文章主要為大家介紹了IDEA插件之彩虹括號(hào)Rainbow?Brackets使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
關(guān)于SpringBoot的spring.factories文件詳細(xì)說明
spring.factories 文件是 Spring Boot 自動(dòng)配置機(jī)制的核心部分之一,它位于每個(gè) Spring Boot 自動(dòng)配置模塊的 META-INF 目錄下,經(jīng)??吹?nbsp;spring.factories 文件,卻沒有對(duì)它進(jìn)行深入的了解和分析,今天我們就一起揭開面紗看看它的內(nèi)在,需要的朋友可以參考下2024-12-12
Springboot swagger配置過程詳解(idea社區(qū)版2023.1.4+apache-maven-3
這篇文章主要介紹了Springboot-swagger配置(idea社區(qū)版2023.1.4+apache-maven-3.9.3-bin),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
JavaSE實(shí)現(xiàn)圖書管理系統(tǒng)的示例代碼
這篇博客是在學(xué)習(xí)了一部分Java基礎(chǔ)語法之后的練習(xí)項(xiàng)目,通過這個(gè)小項(xiàng)目的練習(xí),對(duì)Java中的類和對(duì)象,抽象類和接口等進(jìn)行熟悉理解??旄S小編一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

