使用場景
定義在parent項目中,管理children中引入的依賴版本信息
定義來說比叫簡單,既然在父項目中定義了
創建maven項目,項目結構
wangshuyu-center
- wangshuyu-center-api
- wangshuyu-center-server
- wangshuyu-center-dao
wangshuyu-center pom.xml
中引入了 dependencyManagement
<!-- wangshuyu-center pom.xml -->
<dependencyManagement >
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
wangshuyu-center-server
引入 wangshuyu-center pom.xml
<!-- wangshuyu-center-server pom.xml -->
<parent>
<artifactId>wangshuyu-center</artifactId>
<groupId>com.wangshuyu.center</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
此時在 External Libraries
中是沒有 spring-jdbc
的 jar
如果module中需要使用 dependencyManagement 中的依賴,需要在自己的 pom.xml 中引入
<!-- wangshuyu-center-server pom.xml -->
<parent>
<artifactId>wangshuyu-center</artifactId>
<groupId>com.wangshuyu.center</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<!-- 這里不需要再定義version,會使用management中的 -->
<!-- 如果定義了version則優先使用自定義的,最短路徑原則 -->
</dependency>
</dependencies>
比較有意思的是,如果我在wangshuyu-center-server
中引入新的version
當滿足下面兩個條件時,會標紅
-
該
version
在本地倉庫中是不存在的; -
子pom中沒有引入該依賴;
結論:dependencyManagement中的定義的依賴不會自動去從遠程倉庫下載,只有當module引入該依賴時才會去從遠程倉庫下載。
其實也很好理解,dependencyManagement是規范版本信息,所定義的依賴module中並不一定會使用,只有當module使用時才需要導入。
更進一步
dependencyManagement中的依賴來源:從module中提取
當在開發module時,需要對新引入的dependency做版本管理時,使用dependencyManagement,將module中的version放在父項目中管理。