轉載請注明原文地址:http://www.cnblogs.com/ygj0930/p/6628429.html
一:Maven依賴傳遞
假如有Maven項目A,項目B依賴A,項目C依賴B。那么我們可以說 C依賴A。也就是說,依賴的關系為:C—>B—>A。
那么我們執行項目C時,會自動把B、A都下載導入到C項目的jar包文件夾中。
這就是依賴的傳遞性。
二:依賴傳遞的排除
如上,C—>B—>A。加入現在不想執行C時把A下載進來,那么我們可以用 <exclusions>標簽。
<dependencies> <dependency> <groupId>B</groupId> <artifactId>B</artifactId> <version>0.0.1</version> <exclusions> <exclusion> <!--被排除的依賴包坐標--> <groupId>A</groupId> <artifactId>A</artifactId> <version>0.0.1</version> </exclusion> </exclusions> </dependency> </dependencies>
三:依賴沖突與解決
依賴沖突:一個項目A,通過不同依賴傳遞路徑依賴於X,若在不同路徑下傳遞過來的X版本不同,那么A應該導入哪個版本的X包呢?
沖突解決方案:
1:如果依賴路徑的長度不同,則“短路優先”:
A—>B—>C—>D—>E—>X(version 0.0.1)
A—>F—>X(version 0.0.2)
則A依賴於X(version 0.0.2)。
2:依賴路徑長度相同情況下,則“先聲明優先”:
A—>E—>X(version 0.0.1)
A—>F—>X(version 0.0.2)
則在項目A的<depencies></depencies>中,E、F那個在先則A依賴哪條路徑的X。