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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

maven中snapshot快照库与maven-metadata.xml

發布時間:2023/12/19 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 maven中snapshot快照库与maven-metadata.xml 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ?在使用maven過程中,我們在開發階段經常性的會有很多公共庫處于不穩定狀態,隨時需要修改并發布,可能一天就要發布一次,遇到bug時,甚至一天要發布N次。我們知道,maven的依賴管理是基于版本管理的,對于發布狀態的artifact,如果版本號相同,即使我們內部的鏡像服務器上的組件比本地新,maven也不會主動下載的。

如果我們在開發階段都是基于正式發布版本來做依賴管理,那么遇到這個問題,就需要升級組件的版本號,可這樣就明顯不符合要求和實際情況了。但是,如果是基于快照版本,那么問題就自熱而然的解決了,而maven已經為我們準備好了這一切。

?? ? ?maven中的倉庫分為兩種,snapshot快照倉庫和release發布倉庫。snapshot快照倉庫用于保存開發過程中的不穩定版本,release正式倉庫則是用來保存穩定的發行版本。定義一個組件/模塊為快照版本,只需要在pom文件中在該模塊的版本號后加上-SNAPSHOT即可(注意這里必須是大寫),如下:

<groupId>cc.mzone</groupId> <artifactId>m1</artifactId> <version>0.1-SNAPSHOT</version> <packaging>jar</packaging>

?? ? ?maven2會根據模塊的版本號(pom文件中的version)中是否帶有-SNAPSHOT來判斷是快照版本還是正式版本。如果是快照版本,那么在mvn deploy時會自動發布到快照版本庫中,而使用快照版本的模塊,在不更改版本號的情況下,直接編譯打包時,maven會自動從鏡像服務器上下載最新的快照版本。如果是正式發布版本,那么在mvn deploy時會自動發布到正式版本庫中,而使用正式版本的模塊,在不更改版本號的情況下,編譯打包時如果本地已經存在該版本的模塊則不會主動去鏡像服務器上下載。

?? ? ?所以,我們在開發階段,可以將公用庫的版本設置為快照版本,而被依賴組件則引用快照版本進行開發,在公用庫的快照版本更新后,我們也不需要修改pom文件提示版本號來下載新的版本,直接mvn執行相關編譯、打包命令即可重新下載最新的快照庫了,從而也方便了我們進行開發。

? ? ? 快照版本的管理的本質是metadata.xml,里面有時間戳的對比,(以時間作為標準而不是版本號):

? ? ? metadata.xml 例子:

<?xml version="1.0" encoding="UTF-8"?> <metadata modelVersion="1.1.0"><groupId>com.my.testu</groupId><artifactId>testu</artifactId><version>1.0.1-SNAPSHOT</version><versioning><snapshot><localCopy>true</localCopy></snapshot><lastUpdated>20130307084852</lastUpdated><snapshotVersions><snapshotVersion><extension>jar</extension><value>1.0.1-SNAPSHOT</value><updated>20110407084852</updated></snapshotVersion><snapshotVersion><extension>pom</extension><value>1.0.1-SNAPSHOT</value><updated>20110407084852</updated></snapshotVersion></snapshotVersions></versioning> </metadata>

這個時候,你運行項目(項目依賴快照testu-jar)maven做了什么呢(背景:設置本地通過配置鏡像,使本地Maven的任何資源都是從遠程倉庫的Maven服務器下載的)?

Step1:從遠程的Maven服務器上下載maven-metadata.xml,重命名為“maven-metadata-<RepositoryID>.xml”,并保存到本地倉庫相應目錄。

Step2:比較maven-metadata-local.xml與maven-metadata-<RepositoryID>.xml中的lastUpdated時間戳的值。

  • 如果maven-metadata-local.xml中的時間戳比較大,則終止。
  • 如果maven-metadata-<RepositoryID>.xml中的時間戳較大,則從倉庫Maven服務器上下載最新版本。即:testu-1.0.1-20130407.081828-34.jar。這個過程分兩步:(1)下載testu-1.0.1-20130407.081828-34.jar到本地Maven倉庫。(2)將testu-1.0.1-20130407.081828-34.jar復制一份,覆蓋掉原先的testu-1.0.1-SNAPSHOT.jar。也就是說,如果Maven從遠程倉庫下載了最新的SNAPSHOT發布包的話,那么最新的待時間戳的包和xxx-SNAPSHOT包是完全一樣的。

總結

以上是生活随笔為你收集整理的maven中snapshot快照库与maven-metadata.xml的全部內容,希望文章能夠幫你解決所遇到的問題。

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