1. dependencyManagement
Maven使用dependencyManagement元素來(lái)提供了一種管理依賴版本號(hào)的方式。通常會(huì)在一個(gè)組織或者項(xiàng)目的最頂層的父POM中看到dependencyManagement元素
好處:統(tǒng)一管理項(xiàng)目的版本號(hào),確保應(yīng)用的各個(gè)項(xiàng)目的依賴和版本一致,才能保證測(cè)試的和發(fā)布的是相同的成果。因此,在頂層POM中定義共同的依賴關(guān)系。同時(shí)可以避免在每一個(gè)使用的子項(xiàng)目中都聲明一個(gè)版本號(hào),這樣想升級(jí)或者切換到另一個(gè)版本時(shí),只需要在父類容器里更新,不需要任何一個(gè)子項(xiàng)目的修改;如果某個(gè)子項(xiàng)目需要另一個(gè)版本號(hào)時(shí),只需要在dependencies中聲明一個(gè)版本號(hào)即可。子類就會(huì)使用子類聲明的版本號(hào),不繼承于父類版本號(hào)。
2. dependencies
相對(duì)于dependencyManagement,所有生命在dependencies里的毅力啊都會(huì)自動(dòng)引入,并默認(rèn)被所有的子項(xiàng)目繼承。
3. 區(qū)別
dependencies
即使在子項(xiàng)目中不寫(xiě)該依賴項(xiàng),子項(xiàng)目仍然會(huì)從父項(xiàng)目中繼承該依賴項(xiàng)(全部繼承)dependencyManagement
只是聲明依賴,并不實(shí)際導(dǎo)入,因此子項(xiàng)目需要顯示的聲明需要用的依賴。如果不再子項(xiàng)目中聲明依賴,是不會(huì)從父項(xiàng)目中繼承下來(lái)的;只有在子項(xiàng)目中寫(xiě)了該依賴項(xiàng),并且沒(méi)有指定具體版本,才會(huì)從父項(xiàng)目中繼承該項(xiàng),并且version和scope都讀取自父POM;另外如果子項(xiàng)目中指定了版本號(hào),那么會(huì)使用子項(xiàng)目中指定的版本。
例子:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!--MyBatis分頁(yè)插件starter-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper-starter.version}</version>
</dependency>
<!--MyBatis分頁(yè)插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
</dependencyManagement>