天天看點

maven scope範圍說明Maven的scope依賴作用域說明

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>