SpringBoot文件之Jar檔案格式的閱讀筆記

jackieathome發表於2024-08-25
  • 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可以直接執行

相關文章