## Maven 版本管理架構
Maven 的版本號定義約定
這裏舉一個實際例子: **1.3.4-beta-2**併發
Maven 的版本號定義約定是這樣的:工具
<主版本> . <次版本> . <增量版本> - <里程碑版本>
- **主版本**:表示項目的重大架構變動,可能版本之間徹底不兼容。好比 Maven2 和 Maven 1相去甚遠
- **次版本**:表示大範圍的功能增長和變化,以及bug修復。例如 Nexus 1.5 較 1.4 添加了 LDAP 的支持,並修復了不少 Bug 的修復,但從整體架構來講,沒什麼變化。
- **增量版本**:通常表示重大 Bug 的修復,例如項目發佈了 1.4.0 版本以後,發現了一個影響功能的重大 Bug,則應該快速發佈一個修復了 Bug 的 1.4.1 版本。
- **里程碑版本**:顧名思義,這裏每每指某一個版本的里程碑。例如,Maven 3 已經發布了不少里程碑版本,如 3.0-alpha-一、3.0-beta-1 等。這樣的版本與正式的 3.0 相比,每每表示不是很是穩定,還須要不少測試。
大部分狀況下,項目會有主版本以及次版本,其餘版本號字段視具體項目而定測試
主幹、標籤與分支
使用版本控制工具時咱們都會遇到主幹(trunk)、標籤(tag)和 branch(分支)的概念。版本控制
- **主幹**:項目開發代碼的主體,是從項目開始直到當前都處於活動的狀態。從這裏能夠得到項目最新的源代碼以及幾乎全部的變動歷史。
- **分支**:從主幹的某個點分離出來的代碼拷貝,一般能夠在不影響主幹的前提下在這裏進行重大Bug的修復,或者作一些實驗性質的開發。
- **標籤**:用來標識主幹或者分支的某個點的狀態,以表明項目的某個穩定狀態,這一般就是版本發佈時的狀態。
舉個Subversion的例子(是一個典型的例子,並非規範):code
- 項目主幹基本保持最新,假設項目最第一版本是1.0.0-SNAPSHOT,通過一段時間後,1.0.0版本發佈,這時候就須要在主幹上打一個標籤。
- 而後項目進入1.1.0-SNAPSHOT狀態,大量的開發工做都在主幹中,添加了一些新特性並修復了不少Bug以後,項目1.1.0發佈,一樣,這時候須要打另外一個標籤。
- 發佈以後,而後進入1.2.0-SNAPSHOT階段,可這個時候用戶報告1.1.0版本有一個重大的Bug,須要儘快修復,咱們不能在主幹中修Bug,由於主幹有太多的的變化,沒法在短期內側完畢併發布,咱們也不能中止1.2.0-SNAPSHOT的開發,
- 所以這時候能夠基於1.1.0建立一個1.1.1-SNAPSHOT的分支,在這裏進行Bug修復,而後爲用戶發佈一個1.1.1增量版本,同時打上標籤。固然,還不能忘了把Bug修復涉及的變動合併到1.2.0-SNAPSHOT的主幹中。
- 主幹在開發一段時間以後,發佈1.2.0版本,而後進入到新版本1.3.0-SNAPSHOT的開發過程。