轉載請註明原文地址:http://www.cnblogs.com/ygj0930/p/6628429.html html
一:Maven依賴傳遞spa
假若有Maven項目A,項目B依賴A,項目C依賴B。那麼咱們能夠說 C依賴A。也就是說,依賴的關係爲:C—>B—>A。code
那麼咱們執行項目C時,會自動把B、A都下載導入到C項目的jar包文件夾中。htm
這就是依賴的傳遞性。blog
二:依賴傳遞的排除ci
如上,C—>B—>A。加入如今不想執行C時把A下載進來,那麼咱們能夠用 <exclusions>標籤。get
<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>
三:依賴衝突與解決it
依賴衝突:一個項目A,經過不一樣依賴傳遞路徑依賴於X,若在不一樣路徑下傳遞過來的X版本不一樣,那麼A應該導入哪一個版本的X包呢?io
衝突解決方案:class
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。