maven中的snapshot来源与注意事项
maven的依賴管理是基于版本管理的,在maven2之后,把版本管理細(xì)化snapshot 快照倉庫和release發(fā)布倉庫。release版本,對于發(fā)布狀態(tài)的artifact(就是被依賴的jar包),如果版本號相同,即使我們內(nèi)部的鏡像服務(wù)器上的組件比本地新,maven也不會主動下載的。這里也為snapshot 的出現(xiàn)打下了伏筆。
??????? 快照版本,很多人不是特別理解為什么要有這個事物的出現(xiàn),它的出現(xiàn)對于編程有什么幫助嗎?沒有snapshot出現(xiàn)之前,我們開發(fā)過程依賴別人開發(fā)某個包,通常maven會集中管理這些依賴包,它會要求別人打包成jar放到鏡像服務(wù)器上,自己本地的pom.xml文件設(shè)置了依賴后,maven編譯時,會自動從鏡像服務(wù)器上下載依賴。但如果鏡像服務(wù)器上有相同版本的依賴時,maven就不會下載,這是上段文字的白話版本,那么舉個例子說明一下。
?????? 比如,你的工程要依賴的core版本是 1.0.0 版本,結(jié)果這個版本還正處于對方(叫小菜吧)的開發(fā)過程中,他利用maven命令mvn install打包成jar,并部署到服務(wù)器上,根據(jù)pom設(shè)定的版本,你順利下載了依賴包。但小菜后續(xù)開發(fā)過程,發(fā)現(xiàn)了一個致命bug,那么他再操作一次,那么,即使服務(wù)器的更新是你需要的,你只能干著急,只能跟小菜吼一聲,“你的版本,老子無法更新依賴包,再給我發(fā)一個新的版本上去。”小菜一聽,好吧,那我把版本升到 1.0.1 版本,你通過update dependencies 下載了這個新版本的jar包。這樣的情況,會循環(huán)地出現(xiàn),那么你和小菜有點惱火了,maven就是老鼠鉆到風(fēng)箱里,兩頭受氣,maven想能不能開發(fā)一個功能,使雙方默認(rèn)可以上傳并打包下載到最新的開發(fā)版本,而不用修改版本號,否則開發(fā)完成之后,服務(wù)器上是一堆的release版本。有了這個思路,maven增加了劃時代的功能,snapshot ,這樣依賴版本為 1.0.0-SNAPSHOT (注意必須為全大寫),當(dāng)服務(wù)器上有更新時,會自動下載到本地,省去了不少、和小菜的溝通時間,也減小了不少由于版本問題帶來的編譯錯誤。
????? 任何東西的使用,需要遵循其規(guī)則,snapshot雖然好用,如果使用不當(dāng),反而易造成困惑問題。首先,開發(fā)一個依賴jar包時,注意snapshot版本號的不同,需要一個統(tǒng)一的地方記錄各自的版本,在開發(fā)周期很長的情況下,版本號release的順序并非按版本號順序發(fā)布,重要的是,大家的開發(fā)版本號不能重復(fù)。如果你也在開發(fā)這個core.jar,你依賴于本地,而服務(wù)器上別人有也相同版本號的core.jar定期放在服務(wù)器上,這樣,本地的jar經(jīng)常會被來自服務(wù)器版本覆蓋而導(dǎo)致錯誤。
??????? 總結(jié)一下,我們在開發(fā)階段,可以將公用庫的版本設(shè)置為快照版本,而被依賴組件則引用快照版本進(jìn)行開發(fā),在公用庫的快照版本更新后,我們也不需要修改pom版本號來下載新的版本,直接mvn執(zhí)行相關(guān)編譯、打包命令即可重新下載最新的快照庫了,從而保證了開發(fā)進(jìn)度和質(zhì)量。
總結(jié)
以上是生活随笔為你收集整理的maven中的snapshot来源与注意事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 架构设计 | 基于Seata中间件,微服
- 下一篇: 麻烦!