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)行,同時內(nèi)嵌 Servlet 容器(如 Tomcat、Jetty 或 Undertow)也被包含在內(nèi),使得應(yīng)用可以作為一個獨(dú)立的微服務(wù)運(yùn)行,無需外部的 Servlet 容器。
標(biāo)準(zhǔn)的 Java 應(yīng)用布局:
在傳統(tǒng)的 Java 應(yīng)用中,一個 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 文件的根目錄下。 - 依賴的庫(如
dependency1.jar
、dependency2.jar
)通常位于lib
目錄下,或者完全分離,需要在運(yùn)行時通過類路徑(classpath)指定。
Spring Boot 的可執(zhí)行 jar 布局:
Spring Boot 改變了這種布局來支持自包含的、可執(zhí)行的 jar 文件,這種文件被稱為“胖 jar”(Fat Jar)或“超級 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 類加載器框架的啟動類(如JarLauncher
)。- 應(yīng)用的類文件被放在
BOOT-INF/classes
目錄下。 - 應(yīng)用的所有依賴庫被放在
BOOT-INF/lib
目錄下。 - Spring Boot 的類加載器框架相關(guān)的類位于
org/springframework/boot/loader
下,這些類負(fù)責(zé)正確地加載BOOT-INF
下的類和庫。
為什么需要這種特殊布局:
這種特殊的布局允許 Spring Boot 應(yīng)用將自己的類和第三方庫隔離開來,避免了類路徑?jīng)_突的問題,并確保了應(yīng)用可以作為一個獨(dú)立的單元被運(yùn)行。這種布局使得部署和分發(fā) Spring Boot 應(yīng)用變得非常簡單,因?yàn)樗行枰臇|西都被封裝在一個文件內(nèi),無需額外的配置或外部依賴。
以上就是SpringBoot生成jar/war包的布局應(yīng)用的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot生成jar/war包的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot+Vue項(xiàng)目打包部署完整步驟教程
這篇文章主要介紹了SpringBoot+Vue項(xiàng)目打包部署的相關(guān)資料,包括Vue項(xiàng)目的打包設(shè)置、SpringBoot的配置修改、跨域問題處理、使用Nginx配置反向代理以及最終的項(xiàng)目啟動,教程假定開發(fā)者已具備完整的前后端分離項(xiàng)目和配置好環(huán)境的服務(wù)器,需要的朋友可以參考下2024-10-10Spring Boot集成MinIO進(jìn)行文件存儲和管理的詳細(xì)步驟
這篇文章主要介紹了Spring Boot集成MinIO進(jìn)行文件存儲和管理的詳細(xì)步驟,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-04-04MyBatis如何處理MySQL字段類型date與datetime
這篇文章主要介紹了MyBatis如何處理MySQL字段類型date與datetime問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01idea中使用Inputstream流導(dǎo)致中文亂碼解決方法
很多朋友遇到一個措手不及的問題當(dāng)idea中使用Inputstream流導(dǎo)致中文亂碼及Java FileInputStream讀中文亂碼問題,針對這兩個問題很多朋友不知道該如何解決,下面小編把解決方案分享給大家供大家參考2021-05-05Java多線程 ReentrantReadWriteLock原理及實(shí)例詳解
這篇文章主要介紹了Java多線程 ReentrantReadWriteLock原理及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下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緩存菜單列表,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01