天天看點

Maven-傳遞性依賴和依賴範圍

比如account-mail項目有一個compile範圍的spring-core依賴,spring-core有一個compile範圍的commons-logging依賴,那麼commons-logging就會成為account-email的compile範圍依賴,commons-logging是account-email的一個傳遞性依賴。

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

假設A依賴于B,B依賴于C,我們說A對B是第一直接依賴,B對于C是第二直接依賴,A對于C是傳遞性依賴。第一直接依賴的範圍和第二直接依賴的範圍決定了傳遞性依賴的範圍。

依賴範圍影響傳遞性依賴

compile test provided runtime
compile compile - - runtime
test test - - test
provided provided - provided provided
runtime runtime - - runtime

最左邊一清單示第一直接依賴範圍,最上面一行表示第二直接依賴範圍,中間交叉單元格表示傳遞性依賴範圍

再舉個例子:

account-email項目有一個com.icegreen:greenmail:1.3.1b的直接依賴,我們說這時第一直接依賴,其依賴範圍是test;而greenmail又有一個javax.mail:mail:1.4的直接依賴,我們說這是第二直接依賴,對照表可以知道,當第一直接依賴範圍為test,第二直接依賴範圍是compile的時候,傳遞性依賴的範圍是test。是以,javax.mail:mail:1.4是account-email的一個範圍是test的傳遞性依賴。

可以發現這樣的規律,當第二直接依賴的範圍是compile的時候,傳遞性依賴的範圍與第一直接依賴的範圍一緻;當第二直接依賴的範圍是test的時候,依賴不會得以傳遞;當第二直接依賴的範圍是provided是的時候,隻傳遞第一直接依賴範圍也為provided的依賴,且傳遞性依賴的範圍同樣也為provided;當第二直接依賴的範圍是runtime的時候,傳遞性依賴的範圍與第一直接依賴的範圍一緻,但compile例外,此時傳遞性依賴的範圍為runtime。

繼續閱讀