Maven依賴管理之parent與dependencyManagement深入分析
一、parent依賴管理
作用:定位父項目的坐標標簽,子項目可以直接繼承父項目的依賴包,實現(xiàn)所有子項目共用相同的依賴包。
舉例:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> </parent>
二、dependencyManagement 依賴管理
作用:父子項目依賴的版本管理。
- 通常會在一個項目的最頂層的父pom中使用dependencyManagement,使用dependencyManagement標簽能讓所有子項目在引用一個依賴時不必列出版本號。這樣子項目中該依賴的版本號將使用父項目pom文件中該依賴的版本。
- 子項目中的某依賴沒有指定版本號時,maven會沿著父子層次向上走,直到找到一個擁有dependencyManagement元素的項目,然后它就會使用這個dependencyManagement元素中指定的版本。
- 這樣的好處就是: 如果有多個子項目都引用同一樣依賴,則可以避免在每個使用的子項目里都聲明一個版本號,這樣當想升級或者切換到另一個版本時,只需要在頂層父容器里更新,而不需要一個一個子項目的修改;另外如果某個子項目需要另一個版本,只需要自己pom中聲明版本號即可。
需要注意的是:
- dependencyManagement只聲明依賴,并不實現(xiàn)引入,因此子項目需要顯示的聲明需要用的依賴,如果不在子項目中聲明依賴,是不會從父項目中繼承下來的。
- 只有在子項目中寫了該依賴,并且沒有指定具體版本,才會從父項目中繼承該項,并且version和scope都讀取自父pom。
- 如果子項目中指定了版本號,那么會使用子項目中指定的jar版本。
三、實例分析
單一模塊情況
<!--只是對版本號進行管理,不會實際引入jar--> <dependencyManagement> <dependencies> <dependency> <!--jar包身份限定--> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <!--版本號的聲明--> <version>3.2.7</version> </dependency> </dependencies> </dependencyManagement> <!--會實際下載聲明的依賴jar包--> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <!--不聲明version 標簽,則會繼承dependencyManagement--> </dependency> </dependencies>
多模塊情況
父模塊 pom.xml
<!--parent-module父模塊pom.xml--> <properties> <!--統(tǒng)一管理jar包版本。集中在父模塊properties標簽中定義所有依賴的版本號。--> <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> <!--定義公共依賴的版本號--> <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--> <!--繼承父類--> <parent> <!--聲明父類的身份信息--> <artifactId>parent-module</artifactId> <groupId>com.ppd</groupId> <version>0.0.1-SNAPSHOT</version> <!--聲明父類的pom文件路徑--> <relativePath>../parent-module/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>son-module</artifactId> <packaging>ejb</packaging> <!--依賴關系--> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <!--未聲明則繼承父類version、scope--> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <!--聲明則不繼承父類version--> <version>1.8<version/> <!--繼承父類scope--> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <!--未聲明則繼承父類version--> <scope>provided</scope> </dependency> </dependencies>
四、properties標簽
作用:在pom.xml中的properties標簽下聲明相應的版本信息,然后在dependency下引用的時候用${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>
到此這篇關于Maven依賴管理之parent與dependencyManagement深入分析的文章就介紹到這了,更多相關Maven parent與dependencyManagement內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springmvc級聯(lián)屬性處理無法轉換異常問題解決
這篇文章主要介紹了springmvc級聯(lián)屬性處理無法轉換異常問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12Spring AOP之@Around,@AfterReturning使用、切不進去的解決方案
這篇文章主要介紹了Spring AOP之@Around,@AfterReturning使用、切不進去的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05如何利用Spring把元素解析成BeanDefinition對象
這篇文章主要介紹了如何利用Spring把元素解析成BeanDefinition對象,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08spring-boot react如何一步一步實現(xiàn)增刪改查
這篇文章主要介紹了spring-boot react如何一步一步實現(xiàn)增刪改查,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11Java使用線程池實現(xiàn)socket編程的方法詳解
這篇文章主要為大家詳細介紹了Java使用線程池實現(xiàn)socket編程的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03