【二十一】SpringBoot jar可執行原理

一、spring-boot-maven-plugin插件

SpringBoot項目生成可執行jar包是在maven項目的pom文件中加入了一個插件

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

該插件打出來的jar包是個fat jar,也就是包含了所有第三方依賴的jar包,該fat jar包中有除了java虛擬機以外的所有依賴,是個all-in-one jar包。

去target目錄下就能看到

這個read-spring-0.0.1-SNAPSHOT.jar就是個fat jar,用解壓工具能看到它的目錄結構如下

fat jar 目錄結構

├─BOOT-INF

│       ├─classes        這裏面是我們項目自己寫的代碼

│       └─lib                這裏面是maven pom.xml引用的所有的jar包

├─META-INF

│       ├─maven

│            ├─com.sid

│                 ├─ read-spring

│                       ├─ pom.properties

│                       ├─ pom.xml           

│       ├─MANIFEST.MF             下面會重點講到

└─org

         └─springframework

               └─boot

                      └─loader                  spring boot loader相關的代碼

                               ├─archive

                               ├─data

                               ├─jar

                               └─util

                                └─JarLauncher.class       下面會重點講到

二、MANIFEST.MF文件

看一看該文件的內容:

Manifest-Version: 1.0
Implementation-Title: read-spring
Implementation-Version: 0.0.1-SNAPSHOT
Archiver-Version: Plexus Archiver
Built-By: 37024
Implementation-Vendor-Id: com.sid
Spring-Boot-Version: 1.5.8.RELEASE
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.sid.ReadSpringApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.6.3
Build-Jdk: 1.8.0_221
Implementation-URL: http://projects.spring.io/spring-boot/read-spring/

裏面有兩個重要的屬性

1. Main-Class指向了JarLauncher,它是程序的啓動入口,即JarLauncher類中的main方法纔是程序的入口,在JarLauncher類中的main方法中利用反射調用定義好的Start-Class的main方法

2.Start-Class指向了SpringBoot項目中的啓動類,也就是有註解@SpringBootApplication修飾的那個類

 

對spring boot loader相關的代碼感興趣可以看看這兩篇介紹

SpringBoot源碼分析之SpringBoot可執行文件解析

徹底透析SpringBoot jar可執行原理​​​​​​​

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章