讀古今文學網 > Maven實戰 > 5.6 傳遞性依賴 >

5.6 傳遞性依賴

5.6.1 何為傳遞性依賴

考慮一個基於Spring Framework的項目,如果不使用Maven,那麼在項目中就需要手動下載相關依賴。由於Spring Framework又會依賴於其他開源類庫,因此實際中往往會下載一個很大的如spring-framework-2.5.6-with-dependencies.zip的包,這裡包含了所有Spring Framework的jar包,以及所有它依賴的其他jar包。這麼做往往就引入了很多不必要的依賴。另一種做法是只下載spring-framework-2.5.6.zip這樣一個包,這裡不包含其他相關依賴,到實際使用的時候,再根據出錯信息,或者查詢相關文檔,加入需要的其他依賴。很顯然,這也是一件非常麻煩的事情。

Maven的傳遞性依賴機制可以很好地解決這一問題。以account-email項目為例,該項目有一個org.springframework:spring-core:2.5.6的依賴,而實際上spring-core也有它自己的依賴,我們可以直接訪問位於中央倉庫的該構件的POM:http://repo1.maven.org/maven2/org/springframework/spring-core/2.5.6/spring-core-2.5.6.pom。該文件包含了一個commons-logging依賴,見代碼清單5-6。

代碼清單5-6 spring-core的commons-logging依賴

該依賴沒有聲明依賴範圍,那麼其依賴範圍就是默認的compile。同時回顧一下account-email,spring-core的依賴範圍也是compile。

account-mail有一個compile範圍的spring-core依賴,spring-core有一個compile範圍的commons-logging依賴,那麼commons-logging就會成為account-email的compile範圍依賴,commons-logging是account-email的一個傳遞性依賴,如圖5-2所示。

圖5-2 傳遞性依賴

有了傳遞性依賴機制,在使用Spring Framework的時候就不用去考慮它依賴了什麼,也不用擔心引入多餘的依賴。Maven會解析各個直接依賴的POM,將那些必要的間接依賴,以傳遞性依賴的形式引入到當前的項目中。