maven 的版本雖然咱們常常看到,但對於大部分人來講並無一個清晰的概念。這篇文章將會告訴你:maven 版本的標準規則是什麼?maven如何區分snapshot版本?maven 如何比較版本的大小。bash
maven 版本有四個部分組成,以下所示:
<主版本>.<次版本>.<增量版本>-<里程碑版本>
其中前三個版本用"."分割,最後一個用「-」分割。各個版本能夠任意缺失,但至少保留一個(即版本不可爲空);
須要注意如下幾個問題:maven
里程碑版本能夠由兩部分組成,官方稱之爲buildNumber和qualifier,可是兩者只容許出現一個。兩者的出現的規則有必定的要求:ui
基本規則以下:spa
snapshot即非穩定版本,按照官方規則,該版本在正式發佈以後是不容許存在的,由於它存在不少不肯定性,會致使項目的不穩定。那maven是如何判斷你定義的版本是snapshot呢?
maven 在判斷是不是snapshot時,其自己並未遵循版本定義規則,它只須要知足兩種狀況就認爲是Snapshotcode
^(.*-)?([0-9]{8}\\.[0-9]{6}-[0-9]+)$複製代碼
其實maven 2也認爲LATEST爲snapshot版本,但maven3已經不支持了<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
<groupId>com.my.testu</groupId>
<artifactId>a</artifactId>
<version>1.0.1-SNAPSHOT</version>
<versioning>
<snapshot>
<timestamp>20160909.081828</timestamp>
<buildNumber>34</buildNumber>
</snapshot>
<lastUpdated>20160909081828</lastUpdated>
<snapshotVersions>
<snapshotVersion>
<extension>jar</extension>
<value>1.0.1-20160909.081828-34</value>
<updated>20160909081828</updated>
</snapshotVersion>
<snapshotVersion>
<extension>pom</extension>
<value>1.0.1-20160909.081828-34</value>
<updated>20160909081828</updated>
</snapshotVersion>
</versioning>
</metadata>複製代碼
當咱們引用一個snapshot版本時,一般會以下定義:xml
<dependency>
<groupId>xxx.xxxx</groupId>
<artifactId>xxx</artifactId>
<version>{version}-SNAPSHOT</version>
</dependency>複製代碼
當maven 檢測到須要依賴一個snapshot版本時,就會嘗試從全部的遠程倉庫下載對應的meta文件,並在與本地的meta文件進行merge,獲得一個與{version}並帶有時間戳的最新的版本號(xxx-20171114.221414-13),而後
maven再嘗試下載該版本。這也是爲何Snashot下載耗時的一個緣由。開發