1. 程式人生 > >Maven詳解之------maven版本管理

Maven詳解之------maven版本管理

現在所說的maven版本不同於SVN的版本控制哦!!!

之前我們說過Maven的版本分為快照和穩定版本,快照版本使用在開發的過程中,方便於團隊內部交流學習。而所說的穩定版本,理想狀態下是專案到了某個比較穩定的狀態,這個穩定包含了原始碼和構建都要穩定。

一、如何衡量專案的穩定狀態呢?

1. 所有的自動化測試應當全部通過

2. 專案沒有配置任何快照版本的依賴

3. 專案沒有配置任何快照版本的外掛

4. 專案所包含的程式碼都已經全部提交到了版本控制系統中

5.我們應當再一次執行Maven構建,以確保專案的狀態是OK的

6. 我們將這一次變更提交到版本控制的主幹中,並打上標籤

只有滿足了上述6個條件, 我們就可以將這一個快照版本更新至釋出版本

二、在開發的過程中,版本號要如何進行變更呢?Maven是否有潛在的約定?

我們在開發的過程中,下載jar包的時候經常會發現某個jar類似這樣:1.2.3-beat-4.jar

多麼複雜的一個名稱。。。下面來解釋一下,這裡每個數字的含義:

“ 1 ” :  表示該版本的第一個重大版本

“ 2 ” :  表示這是基於重大版本的第二個次要版本

“ 3 ” :  表示該次要版本的第三個增量

" beat-4" : 表示該增量的一個里程碑

用一個圖來描述:

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

主版本:表示了專案的重大架構變更  struts1 --  struts2

次版本:表示較大範圍的功能增加和變化  Nexus1.5 ----   Nexus1.4

增量版本:一般表示重大Bug修復  

里程碑版本:指某一個版本的里程碑   *.*-alpha-1  *.*-beat-1

看起來有點麻煩啊, 但是在一般來說,我們只會宣告主版本和次版本,增量版本和里程碑版本就不一定了。

注:maven中約定的版本次序

對於主版本、次版本、增量版本來說他們的比較是基於數字的,因此:1.5>1.4>1.3>1.2.11>1.2.8

對於里程碑版本來說,比較是基於字串的,因此:1.5>1.4>1.3>1.2.3>1.2.11

三、主幹、分支、標籤

上面的筆記中提到了主幹和標籤,到底如何理解主幹、分支、標籤呢?

主幹: 專案開發程式碼的主體,是從專案開始到當前都處於活動的狀態,從這裡可以獲得專案最新的原始碼和幾乎所有的變更歷史

分支: 從主幹的某個點分離出來的程式碼拷貝,通常可以在不影響主幹的前提下,在這裡進行重大的bug修復或者實驗性質的開發,如果達到了預期的目的,通常將這裡的變更合併到主幹中去。

標籤: 用來標識主幹或者分支的某個點的狀態,以代表專案的某個穩定狀態,也就是通常說的釋出狀態

這三個元素,可以清晰的描述出項目的版本管理,而且也已經成了一個預設的行業標準。

四、自動化版本釋出

用久了手動版本釋出之後,我們會想到能否進行自動化的釋出版本,答案是肯定的,這將引入一個新的外掛:Maven Release Plugin

通過一些必要的配置,就可以完成版本釋出

Maven Release Plugin 外掛簡介:

該外掛主要有三個目標:release: prepare,  release: rollback,  release: perform (什麼是外掛目標),在介紹分支自動化的時候還會引入branch目標

①release:prepare   準備版本釋出,依次執行下列操作

1. 檢查專案是否有未提交的程式碼

2. 檢查專案是否有快照版本依賴

3. 根據使用者的輸入將快照版本升級為釋出版

4. 將POM中的SCM資訊更新為標籤地址

5. 基於修改後的POM執行maven構建

6. 提交POM變更

7. 基於使用者輸入為程式碼打標籤

8. 將程式碼從釋出版升級為新的快照版

9.提交POM變更

release: rollback

回退release: prepare所執行的操作。將POM回退至release:prepare之前的狀態,並提交。

注:該步驟不會刪除release:prepare生成的標籤,需要使用者手動刪除

release: perform

執行版本釋出

簽出release:prepare生成的標籤中的原始碼,並在此基礎上執行mvn deploy命令打包並部署構件至倉庫

注:要為專案釋出版本,首先需要為其新增正確的版本控制系統資訊(這是因為Maven Release Plugin需要知道版本控制系統的主幹、標籤等地址後才能執行相關操作)

②分支的自動化建立

先看一下Maven Release Plugin 的branch目標能幫助我們做哪些事情

1. 檢查本地有無未提交的程式碼

2. 將分支更改POM的版本,如:1.1.0-SNAPSHOT改成1.1.1-SNAPSHOT

3. 將POM中的SCM資訊更新為分支地址

4. 提交以上更改

5. 將主幹程式碼複製到分支中

6. 修改原生代碼使其回退到分支前的版本(使用者可以指定新的版本)

7. 提交本地更改

注:此時也必須正確的配置SCM資訊

五、程式碼安全

程式碼安全是我們比較關心的一個問題, 比如說,當我們從中央倉庫下載第三方構件的時候,我們可能要去驗證這些檔案的合法性,或者當我們釋出專案後,使用我們專案的人也要驗證

引入一個新的外掛:Maven GPG Plugin 自動的完成簽名

在使用Maven GPG Plugin之前,首先需要確定GPG是可用的,然後再POM中配置外掛即可

pom.xml

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-gpg-plugin</artifactId>
	<version>1.0</version>
	<executions>
	     <execution>
		<id>sign-artifacts</id>
		<phase>verify</phase>
		<goals>
		      <goal>sign</goal>
		</goals>
	     </execution>
	</executions>
</plugin>

然後使用一般的Maven命令簽名併發布專案構件
$mvn clean deploy -Dgpg.passphrase=****

注:

1. 如果不提供 -Dgpg.passphrase引數,執行時就會要求輸入密碼

愛自己的最好方式就是努力奮鬥讓自己優秀起來,如果你再頹廢,別鬱悶沒有知己、找不到真愛,因為連你自己都不愛自己,還妄想別人愛你嗎?試問,你有什麼值得愛,你配嗎?往往一個人在乎的不是金錢而是一顆奮鬥的心啊!醒悟吧!別再墮落了!