Maven依賴(lài)管理之parent與dependencyManagement深入分析
一、parent依賴(lài)管理
作用:定位父項(xiàng)目的坐標(biāo)標(biāo)簽,子項(xiàng)目可以直接繼承父項(xiàng)目的依賴(lài)包,實(shí)現(xiàn)所有子項(xiàng)目共用相同的依賴(lài)包。
舉例:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> </parent>
二、dependencyManagement 依賴(lài)管理
作用:父子項(xiàng)目依賴(lài)的版本管理。
- 通常會(huì)在一個(gè)項(xiàng)目的最頂層的父pom中使用dependencyManagement,使用dependencyManagement標(biāo)簽?zāi)茏屗凶禹?xiàng)目在引用一個(gè)依賴(lài)時(shí)不必列出版本號(hào)。這樣子項(xiàng)目中該依賴(lài)的版本號(hào)將使用父項(xiàng)目pom文件中該依賴(lài)的版本。
- 子項(xiàng)目中的某依賴(lài)沒(méi)有指定版本號(hào)時(shí),maven會(huì)沿著父子層次向上走,直到找到一個(gè)擁有dependencyManagement元素的項(xiàng)目,然后它就會(huì)使用這個(gè)dependencyManagement元素中指定的版本。
- 這樣的好處就是: 如果有多個(gè)子項(xiàng)目都引用同一樣依賴(lài),則可以避免在每個(gè)使用的子項(xiàng)目里都聲明一個(gè)版本號(hào),這樣當(dāng)想升級(jí)或者切換到另一個(gè)版本時(shí),只需要在頂層父容器里更新,而不需要一個(gè)一個(gè)子項(xiàng)目的修改;另外如果某個(gè)子項(xiàng)目需要另一個(gè)版本,只需要自己pom中聲明版本號(hào)即可。
需要注意的是:
- dependencyManagement只聲明依賴(lài),并不實(shí)現(xiàn)引入,因此子項(xiàng)目需要顯示的聲明需要用的依賴(lài),如果不在子項(xiàng)目中聲明依賴(lài),是不會(huì)從父項(xiàng)目中繼承下來(lái)的。
- 只有在子項(xiàng)目中寫(xiě)了該依賴(lài),并且沒(méi)有指定具體版本,才會(huì)從父項(xiàng)目中繼承該項(xiàng),并且version和scope都讀取自父pom。
- 如果子項(xiàng)目中指定了版本號(hào),那么會(huì)使用子項(xiàng)目中指定的jar版本。
三、實(shí)例分析
單一模塊情況
<!--只是對(duì)版本號(hào)進(jìn)行管理,不會(huì)實(shí)際引入jar--> <dependencyManagement> <dependencies> <dependency> <!--jar包身份限定--> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <!--版本號(hào)的聲明--> <version>3.2.7</version> </dependency> </dependencies> </dependencyManagement> <!--會(huì)實(shí)際下載聲明的依賴(lài)jar包--> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <!--不聲明version 標(biāo)簽,則會(huì)繼承dependencyManagement--> </dependency> </dependencies>
多模塊情況
父模塊 pom.xml
<!--parent-module父模塊pom.xml--> <properties> <!--統(tǒng)一管理jar包版本。集中在父模塊properties標(biāo)簽中定義所有依賴(lài)的版本號(hào)。--> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <org.eclipse.persistence.jpa.version>1.2.6</org.eclipse.persistence.jpa.version> <javaee-api.version>1.8</javaee-api.version> </properties> <dependencyManagement> <!--定義公共依賴(lài)的版本號(hào)--> <dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <version>${org.eclipse.persistence.jpa.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>${javaee-api.version}</version> </dependency> </dependencies> </dependencyManagement>
子模塊 pom.xml
<!--son-module子模塊pom.xml--> <!--繼承父類(lèi)--> <parent> <!--聲明父類(lèi)的身份信息--> <artifactId>parent-module</artifactId> <groupId>com.ppd</groupId> <version>0.0.1-SNAPSHOT</version> <!--聲明父類(lèi)的pom文件路徑--> <relativePath>../parent-module/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>son-module</artifactId> <packaging>ejb</packaging> <!--依賴(lài)關(guān)系--> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <!--未聲明則繼承父類(lèi)version、scope--> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <!--聲明則不繼承父類(lèi)version--> <version>1.8<version/> <!--繼承父類(lèi)scope--> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <!--未聲明則繼承父類(lèi)version--> <scope>provided</scope> </dependency> </dependencies>
四、properties標(biāo)簽
作用:在pom.xml中的properties標(biāo)簽下聲明相應(yīng)的版本信息,然后在dependency下引用的時(shí)候用${spring-version}就可以引入該版本jar包了。
舉例:
<properties> <spring-version>4.3.7.RELEASE</spring-version> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-version}</version> </dependency> </dependencies>
到此這篇關(guān)于Maven依賴(lài)管理之parent與dependencyManagement深入分析的文章就介紹到這了,更多相關(guān)Maven parent與dependencyManagement內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JVM進(jìn)階教程之字段訪(fǎng)問(wèn)優(yōu)化淺析
這篇文章主要給大家介紹了關(guān)于JVM進(jìn)階教程之字段訪(fǎng)問(wèn)優(yōu)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01springmvc級(jí)聯(lián)屬性處理無(wú)法轉(zhuǎn)換異常問(wèn)題解決
這篇文章主要介紹了springmvc級(jí)聯(lián)屬性處理無(wú)法轉(zhuǎn)換異常問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12通過(guò)java字節(jié)碼分析學(xué)習(xí)對(duì)象初始化順序
今天用了jmock對(duì)進(jìn)行單元測(cè)試編碼,發(fā)現(xiàn)一個(gè)比較奇怪的語(yǔ)法,static使用方法,見(jiàn)下面例子2013-11-11Spring AOP之@Around,@AfterReturning使用、切不進(jìn)去的解決方案
這篇文章主要介紹了Spring AOP之@Around,@AfterReturning使用、切不進(jìn)去的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05springboot 場(chǎng)景啟動(dòng)器使用解析
這篇文章主要介紹了springboot 場(chǎng)景啟動(dòng)器使用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02如何利用Spring把元素解析成BeanDefinition對(duì)象
這篇文章主要介紹了如何利用Spring把元素解析成BeanDefinition對(duì)象,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08spring-boot react如何一步一步實(shí)現(xiàn)增刪改查
這篇文章主要介紹了spring-boot react如何一步一步實(shí)現(xiàn)增刪改查,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11Java使用線(xiàn)程池實(shí)現(xiàn)socket編程的方法詳解
這篇文章主要為大家詳細(xì)介紹了Java使用線(xiàn)程池實(shí)現(xiàn)socket編程的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03