本文總結自:https://www.cnblogs.com/feibazhf/p/7886617.html
當我們的項目很多時,為了適應子項目的依賴項使用統一的版本,我們可以創建一個parent項目來管理子項目的公共的依賴。
parent項目根據dependencyManagement來定義各個依賴項的版本
例如:
<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>
子項目通過parent繼承父項目
<parent> <artifactId>itoo-base-parent</artifactId> <groupId>com.tgb</groupId> <version>0.0.1-SNAPSHOT</version> <relativePath>../itoo-base-parent/pom.xml</relativePath>
</parent>
接下來子項目的dependency就能不標明版本號,而使用父項目的版本
<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>
-------------------------------------------------------------------------------------
重點:
如果不寫dependencyManagement,即沒有用dependencyManagement包裹dependencies,對於dependencies內的依賴項,子項目中即使沒有明確地寫,仍然會從父項目中繼承該依賴項(全部繼承)。
而如果加上了,
dependencyManagement里只是聲明依賴,並不實現引入,因此子項目需要顯示的聲明需要用的依賴。如果不在子項目中聲明依賴,是不會從父項目中繼承下來的;只有在子項目中寫了該依賴項,並且沒有指定具體版本,才會從父項目中繼承該項,(寫了版本號相當於覆蓋),並且version和scope都讀取自父pom。