av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

SpringBoot2.x的依賴管理配置

瀏覽:4日期:2023-05-08 14:05:24

前提

這篇文章是《SpringBoot2.x入門》專輯的第1篇文章,使用的SpringBoot版本為2.3.1.RELEASE,JDK版本為1.8。

主要梳理一下SpringBoot2.x的依賴關(guān)系和依賴的版本管理,依賴版本管理是開發(fā)和管理一個(gè)SpringBoot項(xiàng)目的前提。

SpringBoot其實(shí)是通過starter的形式,對(duì)spring-framework進(jìn)行裝箱,消除了(但是兼容和保留)原來的XML配置,目的是更加便捷地集成其他框架,打造一個(gè)完整高效的開發(fā)生態(tài)。

SpringBoot依賴關(guān)系

因?yàn)閭€(gè)人不太喜歡Gradle,所以下文都以Maven舉例。

和SpringCloud的版本(SpringCloud的正式版是用倫敦地鐵站或者說倫敦某地名的英文名稱作為版本號(hào),例如比較常用的F版本Finchley就是位于倫敦北部芬奇利)管理不同,SpringBoot的依賴組件發(fā)布版本格式是:X.Y.Z.RELEASE。因?yàn)镾pringBoot組件一般會(huì)裝箱為starter,所以組件的依賴GAV一般為:org.springframework.boot:spring-boot-starter-${組件名}:X.Y.Z.RELEASE,其中X是主版本,不同的主版本意味著可以放棄兼容性,也就是SpringBoot1.x和SpringBoot2.x并不保證兼容性,而組件名一般是代表一類中間件或者一類功能,如data-redis(spring-boot-starter-data-redis,提供Redis訪問功能)、jdbc(spring-boot-starter-jdbc,提供基于JDBC驅(qū)動(dòng)訪問數(shù)據(jù)庫(kù)功能)等等。以SpringBoot當(dāng)前最新的發(fā)布版本2.3.1.RELEASE的org.springframework.boot:spring-boot-starter:jar:2.3.1.RELEASE為例,用mvn dependency:tree分析它的依賴關(guān)系如下:

SpringBoot2.x的依賴管理配置

這個(gè)依賴樹也印證了starter是基于Spring項(xiàng)目裝箱和擴(kuò)展的。

SpringBoot依賴管理

如果使用Spring Initializr創(chuàng)建一個(gè)SpringBoot項(xiàng)目的話,那么會(huì)發(fā)現(xiàn)項(xiàng)目的POM文件中會(huì)加入了一個(gè)parent元素:

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --></parent>

其實(shí)spring-boot-starter-parent相當(dāng)于作為了當(dāng)前項(xiàng)目的父模塊,在父模塊里面管理了當(dāng)前指定的SpringBoot版本2.3.1.RELEASE所有依賴的第三方庫(kù)的統(tǒng)一版本管理,通過spring-boot-starter-parent上溯到最頂層的項(xiàng)目,會(huì)找到一個(gè)properties元素,里面統(tǒng)一管理Spring框架和所有依賴到的第三方組件的統(tǒng)一版本號(hào),這樣就能確保對(duì)于一個(gè)確定的SpringBoot版本,它引入的其他starter不再需要指定版本,同時(shí)所有的第三方依賴的版本也是固定的。如項(xiàng)目的POM文件如下:

<!-- 暫時(shí)省略其他的配置屬性 --><parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency></dependencies>

這樣只需要修改parent元素中的版本號(hào),就能全局更變所有starter的版本號(hào)。這種做法其實(shí)本質(zhì)上是把當(dāng)前項(xiàng)目作為spring-boot-starter-parent的子項(xiàng)目,其實(shí)在一定程度上并不靈活。這里推薦使用另一種方式:通過dependencyManagement元素全局管理SpringBoot版本,適用于單模塊或者多模塊的Maven項(xiàng)目。項(xiàng)目的(父)POM文件如下:

<!-- spring-boot-guide 父POM --><properties> <spring.boot.version>2.3.1.RELEASE</spring.boot.version></properties><dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring.boot.version}</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies></dependencyManagement>

然后需要用到其他starter的時(shí)候,只需要在dependencies直接引入即可,不再需要指定版本號(hào),版本號(hào)由dependencyManagement中定義的版本號(hào)統(tǒng)一管理。

<!-- spring-boot-guide/ch0-dependency 子POM --><dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency></dependencies>

SpringBoot依賴覆蓋

有些特殊的情況,可能項(xiàng)目中大部分的starter使用的是相對(duì)低的版本,但是由于部分新的功能需要使用到更高版本的個(gè)別starter,則需要強(qiáng)制引入該高版本的starter。這里舉一個(gè)例子,項(xiàng)目用到的SpringBoot組件的版本是2.1.5.RELEASE,使用的中間件服務(wù)Elasticsearch的版本是7.x,而spring-boot-starter-data-elasticsearch支持的版本如下:

SpringBoot2.x的依賴管理配置

理論上可以一下子升級(jí)SpringBoot到2.3.1.RELEASE,其實(shí)也可以直接指定spring-boot-starter-data-elasticsearch的版本覆蓋掉全局的SpringBoot組件版本,這里應(yīng)用了Maven的依賴調(diào)解原則:

<!-- 父POM或者全局POM --><properties> <spring.boot.version>2.1.5.RELEASE</spring.boot.version></properties><dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring.boot.version}</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies></dependencyManagement><dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.3.1.RELEASE</version> </dependency></dependencies>

這樣就能單獨(dú)提升spring-boot-starter-data-elasticsearch的版本為2.3.1.RELEASE,其他組件的版本依然保持為2.1.5.RELEASE。

小結(jié)

目前有兩種常用的方式管理SpringBoot組件的版本(兩種方式二選一):

配置parent元素,通過項(xiàng)目繼承的方式指定SpringBoot組件的版本號(hào),這是Spring Initializr生成的項(xiàng)目中默認(rèn)的配置方式。 配置dependencyManagement元素(推薦此方式),通過(父)POM文件統(tǒng)一指定SpringBoot組件的版本號(hào)。

另外,SpringBoot的1.x和2.x之間有兼容性問題(最明顯的一點(diǎn)是2.x中刪除了1.x中大量的內(nèi)建類,如果用到了這些SpringBoot中的內(nèi)建類,容易出現(xiàn)ClassNotFoundException),降級(jí)或者升級(jí)都有比較大的風(fēng)險(xiǎn)。一般情況下,建議使用同一個(gè)大版本進(jìn)行項(xiàng)目開發(fā),如果確定需要進(jìn)行大版本切換,請(qǐng)務(wù)必做完畢的功能測(cè)試。

到此這篇關(guān)于SpringBoot2.x的依賴管理配置的文章就介紹到這了,更多相關(guān)SpringBoot2.x 依賴管理內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

作者: throwable

出處:https://www.cnblogs.com/throwable/p/13206029.html

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 午夜在线电影网 | 久久最新 | 91精品国产91久久久久久最新 | 成人久久久| 九九热精品免费 | 欧美成人猛片aaaaaaa | 91视频久久 | 四虎最新视频 | 久草视| 天天插天天狠天天透 | 免费精品久久久久久中文字幕 | 国产剧情一区 | 日本涩涩视频 | 我想看一级黄色毛片 | 黄色大片视频 | 98成人网 | 成人精品影院 | 国产成人免费 | 欧美日韩国产在线 | 久久日本 | 欧美高清一区 | 国产高清在线精品 | 国产一区视频在线 | 色资源在线观看 | 日韩三级| 欧美一区二区在线播放 | 黄色在线免费观看 | 日产精品久久久一区二区福利 | 污污的网站在线观看 | 成人影视网址 | 一区二区三区在线播放视频 | 国产精品国产自产拍高清 | 国产午夜精品久久 | 亚洲精品18| 国产美女黄色 | 成人免费一区二区 | 亚洲综合一区二区三区 | 欧美.com| 色综合色综合色综合 | 台湾佬伊人 | 欧美一级二级在线观看 |