-
The Executable Jar Format
使用spring-boot-maven-plugin
構建專案時,生成的目標jar檔案的格式的說明。 -
Nested JARs
以JarLauncher
為例:META-INF/MANIFEST.MF
,定義jar的後設資料。org.springframework.boot.loader.launch.JarLauncher.class
,jar的啟動類。BOOT-INF/classes/
,放置專案原始碼構建得到的class檔案。BOOT-INF/lib/
,放置專案依賴的jar檔案。
-
Spring Boot’s “NestedJarFile” Class
-
Launching Executable Jars
檔案META-INF/MANIFEST.MF
的關鍵內容,樣例如下:Main-Class: org.springframework.boot.loader.launch.JarLauncher Start-Class: net.jackieathome.MyApplication
org.springframework.boot.loader.launch.JarLauncher
為啟動類。
net.jackieathome.MyApplication
為專案的主入口。常見的啟動類,如下:
org.springframework.boot.loader.launch.JarLauncher
從BOOT-INF/lib/
下載入專案依賴的jar檔案。org.springframework.boot.loader.launch.WarLauncher
從WEB-INF/lib/
和WEB-INF/lib-provided/
下載入專案依賴的jar檔案。org.springframework.boot.loader.launch.PropertiesLauncher
從BOOT-INF/lib/
下載入專案依賴的jar檔案,其它特性可參考PropertiesLauncher Features。
-
PropertiesLauncher Features
-
Executable Jar Restrictions
注意事項:- 嵌入到目標檔案中的jar的壓縮方式。
- 類載入器的選擇,目前只支援
Thread.getContextClassLoader()
。使用其它方式載入類的元件,和SpringBoot無法自然整合。
-
Alternative Single Jar Solutions
假如無法使用SpringBoot提供的uber jar或者fat jar方案,可行的替代方案,如下:- Maven Shade Plugin
- JarClassLoader
- OneJar
- Gradle Shadow Plugin
參考資料
- 你瞭解 SpringBoot java -jar 的啟動原理嗎?
- Spring Boot 打成的 jar 和普通的 jar
- 為什麼SpringBoot的jar可以直接執行