Maven的scope依賴作用域說明
Maven的scope依賴作用域說明
1、test範圍指的是測試範圍有效,在編譯和打包時都不會使用這個依賴,比如junit預設範圍是test,隻在測試使用,不會再釋出項目時候使用
2、compile範圍指的是編譯範圍有效,在編譯和打包時都會将依賴存儲進去
3、provided依賴:在編譯和測試的過程有效,最後生成war包時不會加入,諸如:servlet-api,因為servlet-api,tomcat等web伺服器已經存在了,如果再打包會沖突
4、runtime在運作的時候依賴,在編譯的時候不依賴
預設的依賴範圍是compile
依賴的傳遞:
作用域是test的包不會傳遞到引用這個項目的其它項目,但如果不是test會傳遞依賴到其它項目。
如:項目A中有一個依賴包junit4.10,它的作用域是test
現在有一個項目B,引用項目A,如果項目B要使用junit4.10就必須自己重新定義依賴關系。【因為不會傳遞依賴,是以不會從項目A中得到】
但:如果作用域是其它的,不是test
那麼項目B可以直接使用不用自己再定義一個依賴關系。【因為會從項目A中自動傳遞依賴,而得到】
依賴關系的傳遞(間接依賴)
1、同級别依賴
-->(依賴)
項目A-->P包1.0
項目B-->P包2.0
項目C-->項目A,項目B
項目C得到的P包,應該是哪個呢?
應該是項目A的P包1.0,因為在項目C中,項目A依賴關系定義在前,項目B的依賴配置定義在後。
2、不同級别依賴,層級少的優先依賴
如:
A-->P1.0
B-->A
C-->B
D-->P2.0
E-->C,D 那麼,E通過傳遞依賴得到的将會是:P2.0 (就算E中的C依賴定義在前面)
3、排隊依賴,當包通過傳遞,産生了沖突時可能通過排隊依賴關系解決
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusiongs>