天天看點

Maven中<dependencies>節點和<dependencyManagement>節點的差別

1.dependencymanagement 應用場景

        maven 使用dependencymanagement 元素來提供了一種管理依賴版本号的方式,通常會在一個組織或者項目的最頂層的pom中看到dependencymanagement 元素,在pom.xml 中使用dependencymanagement 元素能讓所有子項目中引用一個依賴而不用顯式的列出版本号。maven 會沿着父子層次向上走,直到找到一個擁有dependencymanagement 元素的項目,然後它就會使用在這個dependencymanagement 元素中指定的版本号。

        在 pom 中指明 dependency management 元素的方式 maven 結合項目繼承來管理依賴,這樣做的好處就是:如果有多個子項目都引用依賴項的同一版本,確定應用的各個項目的依賴項和版本一緻,才能保證測試的和釋出的是相同的成果,是以,應在頂層的 pom 中定義共同的依賴關系。同時可以避免在每個使用的子項目裡都聲明一個版本号,這樣當想更新或切換到另一個版本時,隻需要在頂層父容器裡更新,而不需要一個一個子項目的修改;另外如果某個子項目需要另外的一個版本,隻需要在dependencies中聲明version即可。

2.dependencymanagement和dependencies的差別

dependencies,即使在子項目中不寫該依賴項,那麼子項目仍然會從父項目中繼承該依賴項。dependencymanagement裡隻是聲明依賴,并不實作引入,是以子項目需要顯式的聲明需要用的依賴。如果在子項目中不寫該依賴項,那麼子項目中是不會從父項目繼承該依賴項的;隻有在子項目中寫了該依賴項,并且沒有指定具體版本,才會從父項目中繼承該項,并且version 和 scope 都讀取自父pom。

3. pom.xml中變量的使用(便于維護)

一 問題闡述

在pom.xml中添加依賴時文法如下

<dependency>

  <groupid>org.springframework</groupid>

  <artifactid>spring-core</artifactid>

  <version>1.2.6</version>

</dependency>

  <artifactid>spring-aop</artifactid>

以上内容沒錯,但有這樣一個問題,在spring的依賴中,我們需要引用一系列版本的spring,如版本1.2.6,每次都寫不利于維護。

二 解決辦法

在pom.xml定義properties标簽

<properties>

  <project.build.sourceencoding>utf-8</project.build.sourceencoding>

  <spring.version>1.2.6</spring.version>

  <developer.organization>xxx</developer.organization>

 </properties>

以上内容就改成了

 <version>${spring.version}</version>

  <version>${spring.version}</version>

維護的時候隻需要修改properties标簽,非常清晰明了。