SpringBoot生成jar/war包的布局應(yīng)用
在 Spring Boot 中,"布局應(yīng)用"(Application Layout)指的是打包生成的可執(zhí)行 jar 或 war 文件中的內(nèi)容組織結(jié)構(gòu)。Spring Boot 使用一種特殊的布局來(lái)確保打包的應(yīng)用可以通過(guò) java -jar
命令直接運(yùn)行,同時(shí)內(nèi)嵌 Servlet 容器(如 Tomcat、Jetty 或 Undertow)也被包含在內(nèi),使得應(yīng)用可以作為一個(gè)獨(dú)立的微服務(wù)運(yùn)行,無(wú)需外部的 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í)通過(guò)類路徑(classpath)指定。
Spring Boot 的可執(zhí)行 jar 布局:
Spring Boot 改變了這種布局來(lái)支持自包含的、可執(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ù)隔離開(kāi)來(lái),避免了類路徑?jīng)_突的問(wèn)題,并確保了應(yīng)用可以作為一個(gè)獨(dú)立的單元被運(yùn)行。這種布局使得部署和分發(fā) Spring Boot 應(yīng)用變得非常簡(jiǎn)單,因?yàn)樗行枰臇|西都被封裝在一個(gè)文件內(nèi),無(wú)需額外的配置或外部依賴。
以上就是SpringBoot生成jar/war包的布局應(yīng)用的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot生成jar/war包的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot+Vue項(xiàng)目打包部署完整步驟教程
這篇文章主要介紹了SpringBoot+Vue項(xiàng)目打包部署的相關(guān)資料,包括Vue項(xiàng)目的打包設(shè)置、SpringBoot的配置修改、跨域問(wèn)題處理、使用Nginx配置反向代理以及最終的項(xiàng)目啟動(dòng),教程假定開(kāi)發(fā)者已具備完整的前后端分離項(xiàng)目和配置好環(huán)境的服務(wù)器,需要的朋友可以參考下2024-10-10Spring Boot集成MinIO進(jìn)行文件存儲(chǔ)和管理的詳細(xì)步驟
這篇文章主要介紹了Spring Boot集成MinIO進(jìn)行文件存儲(chǔ)和管理的詳細(xì)步驟,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-04-04MyBatis如何處理MySQL字段類型date與datetime
這篇文章主要介紹了MyBatis如何處理MySQL字段類型date與datetime問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01idea中使用Inputstream流導(dǎo)致中文亂碼解決方法
很多朋友遇到一個(gè)措手不及的問(wèn)題當(dāng)idea中使用Inputstream流導(dǎo)致中文亂碼及Java FileInputStream讀中文亂碼問(wèn)題,針對(duì)這兩個(gè)問(wèn)題很多朋友不知道該如何解決,下面小編把解決方案分享給大家供大家參考2021-05-05Java多線程 ReentrantReadWriteLock原理及實(shí)例詳解
這篇文章主要介紹了Java多線程 ReentrantReadWriteLock原理及實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09java 獲取服務(wù)器真實(shí)IP的實(shí)例
這篇文章主要介紹了java 獲取服務(wù)器真實(shí)IP的實(shí)例的相關(guān)資料,這里提供實(shí)現(xiàn)方法幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08SpringBoot實(shí)現(xiàn)redis緩存菜單列表
本文主要介紹了SpringBoot實(shí)現(xiàn)redis緩存菜單列表,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01