springboot命令java -jar執(zhí)行流程
一 打包
1.1 命令
mvn clean package
使用命令打包,jar文件路徑:target/*.jar
1.2 包結(jié)構(gòu)
spring-0.0.1-SNAPSHOT.jar
├── META-INF
│ └── maven(主要是pom文件)
│ └── MANIFEST.MF
├── BOOT-INF
│ ├── classes
│ │ └── 應(yīng)用程序類
│ └── lib
│ └── 第三方依賴jar
└── org
└── springframework
└── boot
└── loader
└── springboot啟動(dòng)程序application.yml
com/
META/INF/
*.properties
application.yml:應(yīng)用配置參數(shù)信息
com文件夾:編譯后的class文件
MANIFEST.MF 清單文件
MANIFEST.MF:應(yīng)用jar打包信息
org:來自spring-boot-loader(用于項(xiàng)目的打包和加載)jar包編譯之后的內(nèi)容
start-Class: com.meishi.sales.SalesBootstrap springboot 提供的類加載器 也就是@springBootAplication注解標(biāo)示的類
Main-Class: org.springframework.boot.loader.JarLauncher 程序啟動(dòng)入口類
二 執(zhí)行流程
2.1 依賴
<!-- spring-boot-loader-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-loader</artifactId>
<scope>provided</scope>
</dependency>2.2 JarLauncher
JarLauncher 程序啟動(dòng)入口類 將其對(duì)應(yīng)jar加載到內(nèi)存中 類路徑下
public class JarLauncher extends ExecutableArchiveLauncher {
static final String BOOT_INF_CLASSES = "BOOT-INF/classes/";
static final String BOOT_INF_LIB = "BOOT-INF/lib/";
//在父類方法中創(chuàng)建了歸檔文件
public JarLauncher() {
}
protected JarLauncher(Archive archive) {
super(archive);
}
@Override
protected boolean isNestedArchive(Archive.Entry entry) {
//如果是一個(gè)目錄
if (entry.isDirectory()) {
//如果返回的目錄名字 != "BOOT-INF/classes/"
return entry.getName().equals(BOOT_INF_CLASSES);
}
//如果是一個(gè)文件 是不是以"BOOT-INF/lib/" 開頭
return entry.getName().startsWith(BOOT_INF_LIB);
}
public static void main(String[] args) throws Exception {
//先通過無參構(gòu)造判斷是否為jar再創(chuàng)建歸檔文件archive再調(diào)用父類launcher的launch方法
new JarLauncher().launch(args);
}
}2.3 總結(jié)
1、spring jar包啟動(dòng)時(shí)springboot會(huì)掃描配置清單的Main-Class指定的類執(zhí)行其springboot-loader這個(gè)啟動(dòng)包的JarLauncher的main方法
2、去掃描 boot-inf 中的classes包和lib包 存儲(chǔ)到List集合當(dāng)中。
3、將自定義的加載類LaunchedURLClassLoaderset到上下文去加載對(duì)應(yīng)class 到j(luò)vm當(dāng)中4、在通過start-Class指定的springbootAppliction類獲取到當(dāng)前springboot的 啟動(dòng)類 5、通過反射獲取到main的這個(gè)方法然后invoke啟動(dòng)
到此這篇關(guān)于springboot命令java -jar執(zhí)行流程的文章就介紹到這了,更多相關(guān)springboot java -jar內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot應(yīng)用能直接運(yùn)行java -jar的原因分析
- SpringBoot的java -jar命令啟動(dòng)原理解讀
- SpringBoot項(xiàng)目中java -jar xxx.jar沒有主清單屬性的解決方法
- java?-jar命令及SpringBoot通過java?-jav啟動(dòng)項(xiàng)目的過程
- SpringBoot工程打包后執(zhí)行Java?-Jar就能啟動(dòng)的步驟原理
- 使用java?-jar修改SpringBoot中application.properties的配置項(xiàng)
- SpringBoot java-jar命令行啟動(dòng)原理解析
相關(guān)文章
springboot實(shí)現(xiàn)FastJson解析json數(shù)據(jù)的方法
本篇文章主要介紹了springboot實(shí)現(xiàn)FastJson解析json數(shù)據(jù)的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04
Java多線程編程實(shí)戰(zhàn)之模擬大量數(shù)據(jù)同步
這篇文章主要介紹了Java多線程編程實(shí)戰(zhàn)之模擬大量數(shù)據(jù)同步,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
SpringBatch數(shù)據(jù)寫入實(shí)現(xiàn)
Spring Batch通過ItemWriter接口及其豐富的實(shí)現(xiàn),提供了強(qiáng)大的數(shù)據(jù)寫入能力,本文主要介紹了SpringBatch數(shù)據(jù)寫入實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-04-04
Java如何通過枚舉實(shí)現(xiàn)有限狀態(tài)機(jī)
這篇文章主要介紹了Java如何通過枚舉實(shí)現(xiàn)有限狀態(tài)機(jī),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程詳解
這篇文章主要介紹了es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
mybatis Interceptor對(duì)UpdateTime自動(dòng)處理的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于使用mybatis Interceptor對(duì)UpdateTime自動(dòng)處理的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧2018-12-12
分享Spring?Cloud?OpenFeign?的五個(gè)優(yōu)化技巧
這篇文章主要分享的是Spring?Cloud?OpenFeign?的五個(gè)優(yōu)化技巧,OpenFeign?是?Spring?官方推出的一種聲明式服務(wù)調(diào)用和負(fù)載均衡組件,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-05-05
Java報(bào)錯(cuò):找不到或無法加載主類的解決辦法
在Java中當(dāng)您嘗試運(yùn)行一個(gè)類作為主類時(shí),如果系統(tǒng)找不到該類或者無法加載該類,就會(huì)出現(xiàn)"找不到或無法加載主類"的錯(cuò)誤,這篇文章主要給大家介紹了關(guān)于Java報(bào)錯(cuò):找不到或無法加載主類的解決辦法,需要的朋友可以參考下2024-12-12
Java?Swing實(shí)現(xiàn)記事本頁(yè)面
這篇文章主要為大家詳細(xì)介紹了Java?Swing實(shí)現(xiàn)記事本頁(yè)面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

