欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解SpringBoot的jar為什么可以直接運行

 更新時間:2024年02月25日 09:52:45   作者:飛翔的佩奇  
SpringBoot提供了一個插件spring-boot-maven-plugin用于把程序打包成一個可執(zhí)行的jar包,本文給大家介紹了為什么SpringBoot的jar可以直接運行,文中有相關的代碼示例供大家參考,感興趣的朋友可以參考下

一、為什么SpringBoot的jar可以直接運行?

1.SpringBoot提供了一個插件spring-boot-maven-plugin用于把程序打包成一個可執(zhí)行的jar包。

2.Spring Boot應用打包之后,生成一個Fat jar(jar包中包含jar),包含了應用依賴的jar包和Spring Boot loader相關的
類。

3.java -jar會去找jar中的manifest文件,在那里面找到真正的啟動類(Main-Class);

4.Fat jar的啟動Main函數(shù)是JarLauncher,它負責創(chuàng)建一個LaunchedURLClassLoader來加載boot-lib下面的jar,并以一個新線程啟動應用的啟動類的Main函數(shù)(找到manifest中的Start-Class)。

二、知識延伸

Spring Boot可以使用JAR包啟動的原因

  1. 嵌入式Servlet容器:Spring Boot默認使用嵌入式的Servlet容器(如Tomcat、Jetty、Undertow等)。這使得應用程序可以打包成一個可執(zhí)行的JAR文件,包含了所有的依賴以及一個嵌入式的Servlet容器,而無需外部容器的支持。

  2. Spring Boot Maven插件:Spring Boot提供了Maven和Gradle插件,可以將應用程序打包成可執(zhí)行的JAR文件。這個JAR文件中包含了應用程序的所有依賴以及一個主類,使得它可以被直接運行。

  3. 自動化配置:Spring Boot采用自動化配置的方式,大大減少了開發(fā)者的配置工作。這使得應用程序可以更容易地打包成一個獨立的可執(zhí)行JAR文件,而不需要太多手動配置。

  4. 內(nèi)嵌屬性文件:Spring Boot支持使用application.properties或application.yml文件來配置應用程序。這些配置文件可以被打包進JAR文件,使得應用程序在不同環(huán)境中可以方便地切換配置。

總的來說,Spring Boot通過嵌入式Servlet容器、構建工具插件以及自動化配置等機制,使得應用程序可以方便地打包成一個JAR文件,并通過java -jar命令直接運行。這種方式簡化了部署和運維的流程。

原理

在Spring Boot項目的jar中會生成一個MANIFEST.MF文件(路徑:META-INF\MANIFEST.MF),打開該文件你會看到有一個MainClass的映射,其對應的值是一個類,就是執(zhí)行‘java -jar’命令后正式執(zhí)行的類,mainclass類是springboot插件引入后自動添加的

Manifest-Version: 1.0
Implementation-Title: executable-jar
Implementation-Version: 1.0-SNAPSHOT
Archiver-Version: Plexus Archiver
Built-By: Format
Start-Class: spring.study.executablejar.ExecutableJarApplication
Implementation-Vendor-Id: spring.study
Spring-Boot-Version: 1.3.5.RELEASE
Created-By: Apache Maven 3.2.3
Build-Jdk: 1.8.0_20
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.JarLauncher

如果想看JarLauncher類的源碼需要手動引入‘spring-boot-loader’依賴,其實聲明‘spring-boot-maven-plugin’插件也會自動引入其依賴,但不能查看到源碼內(nèi)容

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-loader</artifactId>
</dependency>

打開之后可以看到此類有一個主程序入口,main方法

protected void launch(String[] args) throws Exception {
   JarFile.registerUrlProtocolHandler();
   //自定義類加載器加載jar文件
   ClassLoader classLoader = createClassLoader(getClassPathArchives());
   //關注getMainClass方法
   launch(args, getMainClass(), classLoader);
}

到此這篇關于詳解為什么SpringBoot的jar可以直接運行的文章就介紹到這了,更多相關SpringBoot jar直接運行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論