最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于springboot打包目錄全解析

 更新時間:2024年07月11日 10:10:00   作者:熊出沒  
這篇文章主要介紹了springboot打包目錄解析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、引言

Java開發(fā)中我們使用最多的便是spring框架,比如springboot應(yīng)用。

微服務(wù)模式下,每個服務(wù)都是一個springboot應(yīng)用,都會被打包成一個可執(zhí)行jar包。

那么我們有多少人嘗試去了解過這個可執(zhí)行jar到底是什么?

它的結(jié)構(gòu)是什么樣的,我認(rèn)為大部分人是沒有關(guān)注過這個的,今天筆者就通過探索的方式,揭開可執(zhí)行jar的真面目。

二、打包項目

首先使用IDEA隨便創(chuàng)建一個spring web項目,打包一下看下target目錄

classes

展開看到如下結(jié)構(gòu),主要是把我們自己寫的.java文件編譯成的.class文件和一些配置文件.yaml或者.properties,我們常說的classpath路徑,就是這個classes文件下的路徑。

generated-sources

這個一般是用來存放框架或者工具自動生成的一些源碼或者文件的地方,比如注解Lombok等。

generated-test-sources

這個沒什么好說的,用來存放生成一些測試代碼源或者文件的地方

maven-archiver

aven-archiver是Maven內(nèi)部使用的一個組件,它屬于org.apache.maven.archiver包,主要職責(zé)在于幫助Maven插件(如maven-jar-plugin, maven-war-plugin等)創(chuàng)建和管理歸檔文件(例如JAR, WAR, EAR等)。

它處理諸如設(shè)置歸檔的元數(shù)據(jù)(如Manifest文件內(nèi)容)、收集和歸檔項目資源和編譯后的類文件等工作。

maven-status

maven-status是Maven在構(gòu)建過程中創(chuàng)建的一個臨時目錄,用于存儲構(gòu)建期間的中間狀態(tài)信息。

這個目錄的內(nèi)容主要是由Maven的maven-build-number-plugin或maven-checkstyle-plugin等插件生成的,特別是那些需要跟蹤文件狀態(tài)的插件。

surefire-reports

surefire-reports是Maven項目在執(zhí)行單元測試時生成的測試報告目錄

test-classes

這個就是測試類的生成目錄

以上就是maven打包后的目錄解析說明,接下來的這兩個單獨的文件是重點

三、可執(zhí)行jar包

首先看這個.jar.original后綴的文件,

進入target目錄下,用360解壓縮解壓下original文件解壓到自己新建的original文件夾下

使用IDEA查看,看到文件結(jié)構(gòu)如下

這個文件很小只有7kb,主要是應(yīng)用的本地資源,并不包含第三方依賴。

再看.jar結(jié)尾的文件,這個就是我們打包好的可執(zhí)行jar包,同樣的解壓到創(chuàng)建的jarExcutable文件中

在IDEA中查看結(jié)構(gòu)如下

使用terminal控制臺,輸入tree

這個文件結(jié)構(gòu)相對來說就比較復(fù)雜了,解釋下關(guān)鍵部分:

  • BOOT-INF/classes:存放的是應(yīng)用編譯后的class文件
  • BOOT-INF/lib:這個存放的是我們引用的所有第三方j(luò)ar包依賴
  • META-INF/:存放應(yīng)用相關(guān)的元信息
  • org/:存放的是springboot相關(guān)的class文件

這個和標(biāo)準(zhǔn)的java EE web應(yīng)用很相似,在java EE web應(yīng)用中class文件放在WEB-INF/classes下,依賴的jar包就放在WEB-INF/lib下,二者很相似,其實spring很多東西是在java EE web基礎(chǔ)上發(fā)展而來。

java -jar yourapplicationName.jar命令可以啟動我們的jar包,那么為什么能啟動呢?打開這個MANIFEST.MF文件內(nèi)容

內(nèi)容如下

這個JarLauncher就是可執(zhí)行JAR文件啟動器,是由以下插件spring-boot-maven-plugin追加進去的,JarLauncher是專門裝載引導(dǎo)類(啟動類)的

pom文件中引入如下依賴(實際開發(fā)不需要引入,這里是為了看源碼)

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

JarLauncher源碼如下:

/*
 * Copyright 2012-2023 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.boot.loader.launch;

/**
 * {@link Launcher} for JAR based archives. This launcher assumes that dependency jars are
 * included inside a {@code /BOOT-INF/lib} directory and that application classes are
 * included inside a {@code /BOOT-INF/classes} directory.
 *
 * @author Phillip Webb
 * @author Andy Wilkinson
 * @author Madhura Bhave
 * @author Scott Frederick
 * @since 3.2.0
 */
public class JarLauncher extends ExecutableArchiveLauncher {

	public JarLauncher() throws Exception {
	}

	protected JarLauncher(Archive archive) throws Exception {
		super(archive);
	}

	@Override
	protected boolean isIncludedOnClassPath(Archive.Entry entry) {
		return isLibraryFileOrClassesDirectory(entry);
	}

	@Override
	protected String getEntryPathPrefix() {
		return "BOOT-INF/";
	}

	static boolean isLibraryFileOrClassesDirectory(Archive.Entry entry) {
		String name = entry.name();
		if (entry.isDirectory()) {
			return name.equals("BOOT-INF/classes/");
		}
		return name.startsWith("BOOT-INF/lib/");
	}

	public static void main(String[] args) throws Exception {
		new JarLauncher().launch(args);
	}

}

其中的BOOT-INF/lib/和BOOT-INF/classes/對應(yīng)我們解壓jar包后的相關(guān)文件目錄,說明JarLauncher 會從中加載文件

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java Array與ArrayList區(qū)別詳解

    Java Array與ArrayList區(qū)別詳解

    這篇文章主要介紹了Java Array與ArrayList區(qū)別詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • SpringBoot整合Retry實現(xiàn)錯誤重試過程逐步介紹

    SpringBoot整合Retry實現(xiàn)錯誤重試過程逐步介紹

    重試的使用場景比較多,比如調(diào)用遠(yuǎn)程服務(wù)時,由于網(wǎng)絡(luò)或者服務(wù)端響應(yīng)慢導(dǎo)致調(diào)用超時,此時可以多重試幾次。用定時任務(wù)也可以實現(xiàn)重試的效果,但比較麻煩,用Spring Retry的話一個注解搞定所有,感興趣的可以了解一下
    2023-02-02
  • 淺析SpringBoot微服務(wù)中異步調(diào)用數(shù)據(jù)提交數(shù)據(jù)庫的問題

    淺析SpringBoot微服務(wù)中異步調(diào)用數(shù)據(jù)提交數(shù)據(jù)庫的問題

    這篇文章主要介紹了SpringBoot微服務(wù)中異步調(diào)用數(shù)據(jù)提交數(shù)據(jù)庫的問題,今天本文涉及到的知識點不難,都是很簡單的crud操作,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • SpringBoot+Ant Design Vue實現(xiàn)數(shù)據(jù)導(dǎo)出功能方式

    SpringBoot+Ant Design Vue實現(xiàn)數(shù)據(jù)導(dǎo)出功能方式

    這篇文章主要介紹了SpringBoot+Ant Design Vue實現(xiàn)數(shù)據(jù)導(dǎo)出功能方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SpringBoot如何獲取Kafka的Topic列表

    SpringBoot如何獲取Kafka的Topic列表

    這篇文章主要介紹了SpringBoot如何獲取Kafka的Topic列表問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • SpringCloud Nacos集群搭建過程詳解

    SpringCloud Nacos集群搭建過程詳解

    Nacos集群不僅僅是服務(wù)注冊中心,還在微服務(wù)架構(gòu)中發(fā)揮著關(guān)鍵的角色,支持多種場景下的服務(wù)治理和協(xié)調(diào),本文介紹了如何在SpringCloud環(huán)境中搭建Nacos集群,為讀者提供了一份清晰而詳盡的指南,通過逐步演示每個關(guān)鍵步驟,讀者能夠輕松理解并操作整個搭建過程
    2024-02-02
  • JDK8的lambda方式List轉(zhuǎn)Map的操作方法

    JDK8的lambda方式List轉(zhuǎn)Map的操作方法

    account是一個返回本身的lambda表達式,其實還可以使用Function接口中的一個默認(rèn)方法代替,使整個方法更簡潔優(yōu)雅,這篇文章主要介紹了JDK8的lambda方式List轉(zhuǎn)Map,需要的朋友可以參考下
    2022-07-07
  • Java web三件套listener、filter、servelt原理解析

    Java web三件套listener、filter、servelt原理解析

    這篇文章主要介紹了Java web三件套listener、filter、servelt原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 堆排序算法的講解及Java版實現(xiàn)

    堆排序算法的講解及Java版實現(xiàn)

    這篇文章主要介紹了堆排序算法的講解及Java版實現(xiàn),堆排序基于堆這種數(shù)據(jù)結(jié)構(gòu),在本文中對堆的概念也有補充介紹,需要的朋友可以參考下
    2016-05-05
  • Maven多模塊之父子關(guān)系的創(chuàng)建

    Maven多模塊之父子關(guān)系的創(chuàng)建

    這篇文章主要介紹了Maven多模塊之父子關(guān)系的創(chuàng)建,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評論

嘉善县| 新民市| 阳谷县| 大悟县| 阜阳市| 蓝山县| 迭部县| 扬州市| 德清县| 尉犁县| 通渭县| 隆子县| 筠连县| 岳池县| 乌审旗| 北辰区| 枣庄市| 阿拉善右旗| 临夏市| 泗阳县| 买车| 华容县| 定南县| 蒙自县| 嘉义市| 望城县| 调兵山市| 大城县| 大方县| 蓬莱市| 息烽县| 蚌埠市| 罗甸县| 苏州市| 宜君县| 永嘉县| 扶风县| 苗栗市| 新泰市| 信阳市| 澎湖县|