maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)
我們知道,maven的依賴關(guān)系是有傳遞性的。如:A-->B,B-->C。但有時(shí)候,項(xiàng)目A可能不是必需依賴C,因此需要在項(xiàng)目A中排除對(duì)A的依賴。在maven的依賴管理中,有兩種方式可以對(duì)依賴關(guān)系進(jìn)行,分別是可選依賴(Optional Dependencies)以及依賴排除(Dependency Exclusions)。
????一、可選依賴
????當(dāng)一個(gè)項(xiàng)目A依賴另一個(gè)項(xiàng)目B時(shí),項(xiàng)目A可能很少一部分功能用到了項(xiàng)目B,此時(shí)就可以在A中配置對(duì)B的可選依賴。舉例來說,一個(gè)類似hibernate的項(xiàng)目,它支持對(duì)mysql、oracle等各種數(shù)據(jù)庫(kù)的支持,但是在引用這個(gè)項(xiàng)目時(shí),我們可能只用到其對(duì)mysql的支持,此時(shí)就可以在這個(gè)項(xiàng)目中配置可選依賴。
????配置可選依賴的原因:1、節(jié)約磁盤、內(nèi)存等空間;2、避免license許可問題;3、避免類路徑問題,等等。
????示例:
[html]?view plain?copy
????假設(shè)以上配置是項(xiàng)目A的配置,即:Project-A --> Project-B。在編譯項(xiàng)目A時(shí),是可以正常通過的。
????如果有一個(gè)新的項(xiàng)目X依賴A,即:Project-X?->?Project-A。此時(shí)項(xiàng)目X就不會(huì)依賴項(xiàng)目B了。如果項(xiàng)目X用到了涉及項(xiàng)目B的功能,那么就需要在pom.xml中重新配置對(duì)項(xiàng)目B的依賴。
????二、依賴排除
????當(dāng)一個(gè)項(xiàng)目A依賴項(xiàng)目B,而項(xiàng)目B同時(shí)依賴項(xiàng)目C,如果項(xiàng)目A中因?yàn)楦鞣N原因不想引用項(xiàng)目C,在配置項(xiàng)目B的依賴時(shí),可以排除對(duì)C的依賴。
????示例(假設(shè)配置的是A的pom.xml,依賴關(guān)系為:A --> B; B --> C):
[html]?view plain?copy
????當(dāng)然,對(duì)于多重依賴,配置也很簡(jiǎn)單,參考如下示例:
[html]?view plain?copy
????A對(duì)于E相當(dāng)于有多重依賴,我們?cè)谂懦龑?duì)E的依賴時(shí),只需要在配置B的依賴中進(jìn)行即可:
[html]?view plain?copy
?
參考資料:
1、maven官網(wǎng):http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html
總結(jié)
以上是生活随笔為你收集整理的maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入浅出: Java回调机制(异步)
- 下一篇: GRPC原理解析