maven初識

maven是java里面最常見的包管理器,在包管理方面前端與之類似的是JS的npm。相對于java,js的包管理起步無疑要晚很多,相對的也就很多借鑒的地方,下面就用類比的方式來談一下maven的一些基本知識。

與package.json相對應的是pom.xml,也就是一個項目的描述,通過groupId,artifactId和version三個屬性可以決定該引用的唯一性,與此同時,該項目相關(guān)依賴都在dependencies標簽下面。

與js的dev- dependencies相對的是pom里面的包可以配置對應的scope,在不同的場景下使用。

對應的,一個項目的依賴也是一個樹形的結(jié)構(gòu)。

IMG_5F08E1C35883-1.jpeg

出于離線開發(fā)的考慮,在npm i或者刷新maven的時候,相關(guān)的依賴包就會被下載到本地包。如果偷懶,大可以就按照每個依賴一直往深處下載,直到最后一層。但這樣是很不明智且浪費空間的做法。(早期的npm就不夠智能)例如上圖,B和D都依賴C,沒有必要下載兩次C。

現(xiàn)在的npm是會比較版本,相同版本的包只會下載一次,不同的再采用不同的包。但是java的包系統(tǒng)和js不同的地方在于java引入外部包的時候是會把外部包的路徑加到環(huán)境變量中去尋找,這樣包名具有唯一性,所以在兩個依賴的包版本不一樣的時候就會出現(xiàn)所謂的包沖突。

maven的包管理出現(xiàn)兩個沖突時遵循兩個原則:

  1. 深度不一樣的情況選擇路徑短的
  2. 路徑深度相同的情況選擇先出現(xiàn)的
    兩種情況優(yōu)先選擇的情況在上圖都用紅色標記出來了,換言之可以理解為一個從上到下的廣度優(yōu)先遍歷。
IMG_B2F6404F8424-1.jpeg

關(guān)于maven包管理的基本信息目前只了解到這里,maven與npm不同的是自帶了很完善的生命周期,而前端要做一些操作只能自己去寫npm script,后續(xù)更多關(guān)于maven的使用了解之后再細說。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容