本文轉自CSDN,原文點擊此處。本文稍有修改。
DepencyManagement應用場景
如果一個項目有多個模塊組成,各個模塊各自引入自己的bao,難免出現同一個包出現在項目的不同模塊中的情況。這時候就會產生沖突,進而導致打包失敗。
此時就要用到統一的依賴管理,目的就是統一項目使用到的依賴。
如何使用dependencyManagement
由于我們的模塊很多,所以我們又抽象了一層,抽出一個itoo-base-parent來管理子項目的公共的依賴。為了項目的正確運行,必須讓所有的子項目使用依賴項的統一版本,必須確保應用的各個項目的依賴項和版本一致,才能保證測試的和發布的是相同的結果。
在我們項目頂層的POM文件中,我們會看到dependencyManagement
元素。通過它元素來管理jar包的版本,讓子項目中引用一個依賴而不用顯示的列出版本號。Maven會沿著父子層次向上走,直到找到一個擁有dependencyManagement元素的項目,然后它就會使用在這個dependencyManagement元素中指定的版本號。
- Itoo-base-parent(pom.xml)
<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>
- Itoo-base(pom.xml)
<!--繼承父類-->
<parent>
<artifactId>itoo-base-parent</artifactId>
<groupId>com.tgb</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../itoo-base-parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>itoo-base</artifactId>
<packaging>ejb</packaging>
<!--依賴關系-->
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
<parent>
標簽里面括出了依賴的父類項目,此時子類的pom文件中加入依賴的時候,就不需要再指定每個依賴項的版本了,反倒是在parent的pom文件中一起指定。需要說明的是:父項目的pom文件起到的是聲明的作用,你可以不用里面的依賴,但是用了就必須要在子項目的pom文件中添加,知識不需要加版本號了。原因是:父類項目的pom文件起聲明作用,并不實際引入,實際引入還是在子項目中實現的。
只有在子項目中寫了該依賴項,并且沒有指定具體版本,才會從父項目中繼承該項,并且version和scope都讀取自父pom;另外如果子項目中指定了版本號,那么會使用子項目中指定的jar版本。