SpringBoot生成jar/war包的布局應用
在 Spring Boot 中,"布局應用"(Application Layout)指的是打包生成的可執(zhí)行 jar 或 war 文件中的內(nèi)容組織結(jié)構(gòu)。Spring Boot 使用一種特殊的布局來確保打包的應用可以通過 java -jar 命令直接運行,同時內(nèi)嵌 Servlet 容器(如 Tomcat、Jetty 或 Undertow)也被包含在內(nèi),使得應用可以作為一個獨立的微服務運行,無需外部的 Servlet 容器。
標準的 Java 應用布局:
在傳統(tǒng)的 Java 應用中,一個 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)。- 應用的類文件(如
MyApplication.class)直接包含在 jar 文件的根目錄下。 - 依賴的庫(如
dependency1.jar、dependency2.jar)通常位于lib目錄下,或者完全分離,需要在運行時通過類路徑(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)。- 應用的類文件被放在
BOOT-INF/classes目錄下。 - 應用的所有依賴庫被放在
BOOT-INF/lib目錄下。 - Spring Boot 的類加載器框架相關(guān)的類位于
org/springframework/boot/loader下,這些類負責正確地加載BOOT-INF下的類和庫。
為什么需要這種特殊布局:
這種特殊的布局允許 Spring Boot 應用將自己的類和第三方庫隔離開來,避免了類路徑?jīng)_突的問題,并確保了應用可以作為一個獨立的單元被運行。這種布局使得部署和分發(fā) Spring Boot 應用變得非常簡單,因為所有需要的東西都被封裝在一個文件內(nèi),無需額外的配置或外部依賴。
以上就是SpringBoot生成jar/war包的布局應用的詳細內(nèi)容,更多關(guān)于SpringBoot生成jar/war包的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Boot集成MinIO進行文件存儲和管理的詳細步驟
這篇文章主要介紹了Spring Boot集成MinIO進行文件存儲和管理的詳細步驟,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧2025-04-04
MyBatis如何處理MySQL字段類型date與datetime
這篇文章主要介紹了MyBatis如何處理MySQL字段類型date與datetime問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
Java多線程 ReentrantReadWriteLock原理及實例詳解
這篇文章主要介紹了Java多線程 ReentrantReadWriteLock原理及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-09-09

