讀古今文學網 > Maven實戰 > 13.2 Maven的版本號定義約定 >

13.2 Maven的版本號定義約定

到目前為止,讀者應該已經清楚瞭解了快照版和發佈版的區別。現在再深入看一下1.0、1.1、1.2.1、3.0-beta這樣的版本號後面又遵循了怎樣的約定。瞭解了這樣的約定之後,就可以正確地為自己的產品或者項目定義版本號,而你的用戶也能瞭解到隱藏在版本號中的信息。

看一個實際的例子,這裡有一個版本:

1.3.4-beta-2

這往往表示了該項目或產品的第一個重大版本的第三個次要版本的第四次增量版本的beta-2里程碑。很拗口?那一個個分開解釋:「1」表示了該版本是第一個重大版本;「3」表示這是基於重大版本的第三個次要版本;「4」表示該次要版本的第四個增量;最後的「beta-2」表示該增量的某一個里程碑。

也就是說,Maven的版本號定義約定是這樣的:

<主版本>.<次版本>.<增量版本>-<里程碑版本>

主版本和次版本之間,以及次版本和增量版本之間用點號分隔,里程碑版本之前用連字號分隔。下面解釋其中每一個部分的意義:

·主版本:表示了項目的重大架構變更。例如,Maven 2和Maven 1相去甚遠;Struts 1和Struts 2採用了不同的架構;JUnit 4較JUnit 3增加了標注支持。

·次版本:表示較大範圍的功能增加和變化,及Bug修復。例如Nexus 1.5較1.4添加了LDAP的支持,並修復了很多Bug,但從總體架構來說,沒有什麼變化。

·增量版本:一般表示重大Bug的修復,例如項目發佈了1.4.0版本之後,發現了一個影響功能的重大Bug,則應該快速發佈一個修復了Bug的1.4.1版本。

·里程碑版本:顧名思義,這往往指某一個版本的里程碑。例如,Maven 3已經發佈了很多里程碑版本,如3.0-alpha-1、3.0-alpha-2、3.0-beta-1等。這樣的版本與正式的3.0相比,往往表示不是非常穩定,還需要很多測試。

需要注意的是,不是每個版本號都必須擁有這四個部分。一般來說,主版本和次版本都會聲明,但增量版本和里程碑就不一定了。例如,像3.8這樣的版本沒有增量和里程碑,2.0-beta-1沒有增量。但我們不會看到有人省略次版本,簡單地給出主版本顯然是不夠的。

當用戶在聲明依賴或插件未聲明版本時,Maven就會根據上述的版本號約定自動解析最新版本。這個時候就需要對版本號進行排序。對於主版本、次版本和增量版本來說,比較是基於數字的,因此1.5>1.4>1.3.11>1.3.9。而對於里程碑版本,Maven則只進行簡單的字符串比較,因此會得到1.2-beta-3>1.2-beta-11的結果。這一點需要留意。