日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Maven依赖中的scope详解

發布時間:2024/9/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的動作。

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。

下面是一張nexus畫的圖。?

總結

以上是生活随笔為你收集整理的Maven依赖中的scope详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。