maven的依賴管理
來自: http://my.oschina.net/u/2357525/blog/614751
比如有的依賴的<scope>是寫在子項目中的 <dependencies> 下的<dependency> 標簽中,
而有的依賴的<scope>是寫在父項目中的<dependencyManagement> 中 。
把驗證過程給大家說下,大家也可以自己練手。
首先新建三個項目,Parent作為父項目、projectA、projectB作為子項目。
在父項目Parent中依賴項如下:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
在子項目projectA、projectB中沒有寫任何依賴,在projectA 下運行命令 mvn help:effective-pom,會發現A下面有 junit 4.8.1的依賴。
如果我把 父項目Parent 中的依賴修改如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
子項目ProjectA、projectB下面還是沒有任何依賴項,在projectA 下運行命令 mvn help:effective-pom,會發現A下面 沒有 junit 4.8.1的依賴。
如果我在projectA 下添加junit的依賴:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
再在projectA 下運行命令 mvn help:effective-pom,會發現A下面有了 junit 4.8.1的依賴,并且scope為 test。
那么經過驗證,scope寫在子項目中的<dependencies> 下的<dependency>中,或是寫在父項目中的<dependencyManagement>中,都是可以的。
但有一點需要注意,dependencies 和 dependencyManagement 的區別在于:
前者,即使在子項目中不寫該依賴項,那么子項目仍然會從父項目中繼承該依賴項。
后者,如果在子項目中不寫該依賴項,那么子項目中是不會從父項目繼承該依賴項的;只有在子項目中寫了該依賴項,才會從父項目中繼承該項,并且version 和 scope 都讀取自 父pom。
pluginManagement和plugins的區別同dependencyManagement和dependencies