首頁 >Java >java教程 >SpringBoot依賴管理源碼分析

SpringBoot依賴管理源碼分析

WBOY
WBOY轉載
2023-05-22 13:49:141064瀏覽

一. 依賴管理

Ⅰ. 部分dependency導入時為啥不需要指定版本?

SpringBoot依賴管理源碼分析

我們建立專案時新增的依賴並沒有幫我們指定版本號,那SpringBoot是如何來指定版本帳號的呢?

現在我們來剝析SpringBoot的父依賴啟動器

<!--	SpringBoot父项目依赖管理-->
	<parent>
		<artifactId>spring-boot-parent</artifactId>
		<groupId>org.springframework.boot</groupId>
		<version>2.2.9.RELEASE</version>
		<relativePath/>			<!-- 查看本地仓库的源码 -->
	</parent>
1.1 父依賴啟動器的工作

滑鼠指標停留在spring -boot-parentCtrl 滑鼠左鍵點擊進去,我們來看看這個父依賴啟動器負責什麼工作:

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-dependencies</artifactId>
   <version>${revision}</version>
   <relativePath>../spring-boot-dependencies</relativePath>
</parent>

首先進去發現:這個父依賴啟動器有一個爸爸,如上!這個我們後面深入剝析! ! !

然後接下看

<properties>
   <main.basedir>${basedir}/../..</main.basedir>
   <disable.checks>false</disable.checks>
   <git.url>https://github.com/spring-projects/spring-boot</git.url>
   <git.connection>scm:git:git://github.com/spring-projects/spring-boot.git</git.connection>
   <git.developerConnection>scm:git:ssh://git@github.com/spring-projects/spring-boot.git</git.developerConnection>
   <java.version>1.8</java.version>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
   <maven.version>3.5.4</maven.version>
   <maven-resolver.version>1.1.1</maven-resolver.version>
   <spock.version>1.3-groovy-2.5</spock.version>
   <spring-asciidoctor-extensions.version>0.4.0.RELEASE</spring-asciidoctor-extensions.version>
   <spring-doc-resources.version>0.1.3.RELEASE</spring-doc-resources.version>
   <spring-doc-resources.url>https://repo.spring.io/release/io/spring/docresources/spring-doc-resources/${spring-doc-resources.version}/spring-doc-resources-${spring-doc-resources.version}.zip</spring-doc-resources.url>
   <testcontainers.version>1.12.5</testcontainers.version>
   <testng.version>6.14.3</testng.version>
</properties>

看到這裡進行了一個屬性聲明,聲明了jdk版本,編碼格式以及打包編譯後的版本等;但是這裡僅僅只是聲明! ! !

我們接著

SpringBoot依賴管理源碼分析

這個部分是SpringBoot的外掛程式管理

tips:

在匯入外掛程式時,由於此處的管理模組外掛程式需要特定的版本號,因此無需考慮外掛程式版本控制的問題。

1.2 問題答案

我們Ctrl 滑鼠右鍵點選,一進來就看到了一系列的版本號碼:

SpringBoot依賴管理源碼分析

這裡就宣告了很多第三方框架的版本號,這裡對應的是2.2.9.RELEASE的版本號,如果更改SpringBoot版本則這裡的版本也會改變。但是正如前面所說,也只是聲明而已! ! !

我們接著

SpringBoot依賴管理源碼分析

決定專案不需要匯入版本號碼的原因還得是

tips:

spring-boot-starter-parent 透過繼承spring-boot-dependencies 從而實現了SprngBoot的本依賴營理,所以我的Springboot工程繼承spring-boot-starter-parent後已經具備版本鎖定等配置了,這也就是在Spring Boot 專案中部分依賴不需要寫版本號的原因。

Ⅱ. 專案運行依賴的JAR套件是從何而來的?

Spring-Boot-Starter-Parent父依賴啟動器的主要功能是進行版本統一管理,那麼專案運行依賴的JAR套件是從何而來的?

2.1 分析原始碼

我們以< ;>為突破口,我們依舊是Ctrl 滑鼠左鍵點進去,在spring-boot-starter-web裡面很明顯看到了一系列的依賴管理:

<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-json</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-validation</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.apache.tomcat.embed</groupId>
					<artifactId>tomcat-embed-el</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
		</dependency>
	</dependencies>

我們只在pom.xml裡面引入了spring-boot-starter-web一個依賴(也就是直接依賴了web依賴啟動器),而裡面依賴了tomcat,springmvc等等,則說明這個過程中進行了依賴傳遞,而我們點擊任何一個web依賴啟動器裡面的依賴時發現,裡面依然還有很多依賴,以tomcat為例:

SpringBoot依賴管理源碼分析

裡面仍然包含了啟動tomcat所需要的全部依賴。

2.2 問題答案

到這裡我們就可以知道spring-boot-starter-web依賴啟動器的主要作用就是打包了Web開發場景所有的依賴(基於依賴傳遞的方式,載入目前倉庫裡對應的jar包)。

正是如此,在pom.xml中引入spring-boot-stater-web依賴啟動器時,就可以實現Web場原開發,而不需要額外導入Tomcat服務戰以及其他Web依賴文件等當然,這些引入的依賴文件的版本號還是由spring-boot-starter-parent父依賴進行的統一管理(這也是SpringBoot約定大於配置的一個重要體現)Spring Boot除了提供有上述介紹的Web依賴啟動器外,還提供了其他許多開發場景的相關依賴。

以上是SpringBoot依賴管理源碼分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除