SpringBoot項目打包后的項目結構(以jar包為例)


根目錄
    |-- BOOT-INF
|-- classes
|-- lib
|-- META-INF |-- org
  • BOOT-INF 目錄
    • classes 目錄中存放項目代碼對應的 .class文件
    • lib 目錄中存放項目相關的依賴包,依賴包以 jar包 的方式存放(jar文件中存放jar文件,有個專門稱呼叫 “FatJar”
  • META-INF
    • 存放清單文件,其內容描述當前可執行 jar 包的基本信息
    • 其中,有兩個主要的描述信息:
      • Main-Class
        • 描述 jar包 的入口文件(main 方法所在的類)

        • Spring 框架固定是 org.springframework.boot.loader.JarLauncher

        • 定義完此屬性后,一定要有一個換行

      • Start-Class
        • 描述自定義 main 方法的全稱

  • org
    • 存放了一些打包 SpringBoot 項目后的相關啟動類

    • 由於 SpringBoot 基於管理及安全性的考慮,打包使用 “項目代碼與依賴包分離” 的方式(不同於以前將所有依賴包中的 .class 文件與項目的 .class 文件合並到一起的方式),因此打包后的 jar/war 包中依然包含了依賴的 jar 包,不符合 jar包 的規范,依賴的 jar包 無法通過默認的加載器進行加載

    • 為了規避 jar文件規范,SpringBoot 使用自定義加載器去加載整個項目,於是入口就不再是編寫項目時的 main 方法,而是使用 org.springframework.boot.loader.JarLauncher 類,在啟動的時候創建自定義加載器去加載項目中的所有類

    • 因此,打包后的 SpringBoot 項目,只有 org 文件夾中的類的類加載器是 AppClassLoaderBOOT-INF 文件夾中的類和依賴包的加載器是 LaunchedURLClassLoader

war包的結構跟jar包結構差不多,只是多了幾個目錄(如 “WEB-INF/” 等)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM