Maven依賴中的scope詳解
Maven的一個哲學是慣例優於配置(Convention Over Configuration), Maven預設的依賴配置項中,scope的預設值是compile,專案中經常傻傻的分不清,直接預設了。今天梳理一下maven的scope。
scope的分類
compile
預設就是compile,什麼都不配置也就是意味著compile。compile表示被依賴專案需要參與當前專案的編譯,當然後續的測試,執行週期也參與其中,是一個比較強的依賴。打包的時候通常需要包含進去。
test
scope為test表示依賴專案僅僅參與測試相關的工作,包括測試程式碼的編譯,執行。比較典型的如junit。
runntime
runntime表示被依賴專案無需參與專案的編譯,不過後期的測試和執行週期需要其參與。與compile相比,跳過編譯而已,說實話在終端的專案(非開源,企業內部系統)中,和compile區別不是很大。比較常見的如JSR×××的實現,對應的API jar是compile的,具體實現是runtime的,compile只需要知道介面就足夠了。oracle jdbc驅動架包就是一個很好的例子,一般scope為runntime。另外runntime的依賴通常和optional搭配使用,optional為true。我可以用A實現,也可以用B實現。
provided
provided意味著打包的時候可以不用包進去,別的設施(Web Container)會提供。事實上該依賴理論上可以參與編譯,測試,執行等週期。相當於compile,但是在打包階段做了exclude的動作。比如servlet-api.jar
system
從參與度來說,也provided相同,不過被依賴項不會從maven倉庫抓,而是從本地檔案系統拿,一定需要配合systemPath屬性使用。
scope的依賴傳遞
A–>B–>C。當前專案為A,A依賴於B,B依賴於C。知道B在A專案中的scope,那麼怎麼知道C在A中的scope呢?答案是:
當C是test或者provided時,C直接被丟棄,A不依賴C;
否則A依賴C,C的scope繼承於B的scope。
相關文章
- Maven依賴scope範圍詳解Maven
- Maven中的dependency的scope作用域詳解Maven
- maven中的scope標籤類別詳解Maven
- ASP.NET Core 依賴注入中的ScopeASP.NET依賴注入
- Maven依賴管理:控制依賴的傳遞Maven
- 解決Maven中90%的依賴(導包)問題Maven
- 解決eclipse的maven依賴報錯EclipseMaven
- Maven依賴管理Maven
- - Maven 依賴管理Maven
- Maven 依賴管理Maven
- 詳解 Laravel 中的依賴注入和 IoCLaravel依賴注入
- maven中Scope的作用Maven
- maven 將依賴包打入jar中MavenJAR
- Maven工程依賴配置Maven
- Maven 引入外部依賴Maven
- Maven依賴機制Maven
- maven 依賴匯入Maven
- Maven 依賴關係Maven
- Maven依賴衝突解決總結Maven
- maven依賴衝突以及解決方法Maven
- eclipse中maven專案不顯示Maven Dependencies依賴EclipseMaven
- Maven快速入門(五)Maven的依賴管理Maven
- Maven檢視依賴樹Maven
- Maven依賴管理系統Maven
- Maven依賴管理之BOMMaven
- Maven的頂級功能——依賴管理Maven
- IDEA中Maven顯示存在依賴但專案中並未匯入依賴JARIdeaMavenJAR
- Maven:idea新增maven依賴分析外掛MavenIdea
- Maven什麼時候需要排除依賴,如何排除依賴Maven
- 詳解.NET依賴注入中物件的建立與“銷燬”依賴注入物件
- Maven依賴版本更新踩坑Maven
- maven基礎:依賴範圍Maven
- maven2+依賴傳遞Maven
- Maven依賴衝突處理Maven
- Maven 原始碼解析:依賴調解是如何實現的?Maven原始碼
- Maven依賴版本號引發的血案Maven
- IDEA Maven無法新增依賴到專案中IdeaMaven
- Dependency Injection-依賴注入詳解依賴注入