maven 的作用域和傳遞依賴問題


maven的作用域共有五個: 

  (1) compile   默認就是compile,什么都不配置也就是意味着compile。compile表示被依賴項目需要參與當前項目的編譯,當然后續的測試,運行周期也參與其中,是一個比較強的依賴。打包的時候通常需要包含進去。

  (2)   test   scope為test表示依賴項目僅僅參與測試相關的工作,包括測試代碼的編譯,執行。比較典型的如junit。

  (3)   runntime  runntime表示被依賴項目無需參與項目的編譯,不過后期的測試和運行周期需要其參與。與compile相比,跳過編譯而已,說實話在終端的項目(非開源,企業內部系統)中,和compile區別不是很大。Oracle jdbc驅動架包就是一個很好的例子,一般scope為runntime。

  (4)  provided  provided意味着打包的時候可以不用包進去,別的設施(Web Container)會提供。事實上該依賴理論上可以參與編譯,測試,運行等周期。相當於compile,但是在打包階段做了exclude的動作。

  (5)  system  從參與度來說,也provided相同,不過被依賴項不會從maven倉庫抓,而是從本地文件系統拿,一定需要配合systemPath屬性使用。

scope 的傳遞依賴:

  如果項目A->B->C,如果項目 A依賴項目B,項目B依賴項目C,知道B在A項目中的scope,那么怎么知道C在A中的scope呢?答案是: 
           當C是test或者provided時,C直接被丟棄,A不依賴C; 
           否則A依賴C,C的scope繼承於B的scope。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM