讀古今文學網 > Maven實戰 > 13.5 自動化創建分支 >

13.5 自動化創建分支

13.4節介紹了如何使用Maven Release Plugin自動化版本發佈,如果回顧一下圖13-2,就會發現分支創建的操作還沒有具體涉及。本節就繼續基於實際的樣例講解如何自動化創建分支。

在圖13-2中可以看到,在正式發佈版本1.1.0的同時,還可以創建一個分支用來修復將來這個版本可能遇到的重大Bug。這個過程可以手工完成,例如使用svn copy操作將主幹代碼複製到一個名為1.1.x的分支中,然後修改分支中的POM文件,升級其版本為1.1.1-SNAPSHOT,這會涉及很多Subversion操作。

使用Maven Release Plugin的branch目標,它能夠幫我們自動化這些操作:

·檢查本地有無未提交的代碼。

·為分支更改POM的版本,例如從1.1.0-SNAPSHOT改變成1.1.1-SNAPSHOT。

·將POM中的SCM信息更新為分支地址。

·提交以上更改。

·將主幹的代碼複製到分支中。

·修改本地代碼使其回退到分之前的版本(用戶可以指定新的版本)。

·提交本地更改。

當然,為了讓Maven Release Plugin為我們工作,和版本發佈一樣,必須在POM中提供正確的SCM信息。此外,由於分支操作會涉及版本控制系統裡的分支地址,因此還要為Maven Release Plugin配置分支基礎目錄,如代碼清單13-4所示。

代碼清單13-4 配置maven-release-plugin提供分支基礎目錄

然而tagBase和branchBase並非是一定要配置的。如果為版本控制倉庫使用了標準的Subversion佈局,即在平行的trunk/tags/branches目錄下分別放置項目主幹代碼、標籤代碼和分支代碼,那麼Maven Release Plugin就能夠自動根據主幹代碼位置計算出標籤及分支代碼位置,因此你就可以省略這兩項配置。

理解了創建分支所將執行的實際行為後,就可以在項目目錄下運行如下命令以創建分支:

上述命令中使用了Maven Release Plugin的branch目標,-DbranchName=1.1.x用來配置所要創建的分支的名稱,-DupdateBranchVersions=true表示為分支使用新的版本,-DupdateWorkingCopyVersions=false表示不更新本地代碼(即主幹)的版本。運行上述命令之後,Maven會提示輸入分支項目的版本。例如:

用戶根據自己的需要為分支輸入新的版本後按Enter鍵,Maven就會處理其餘的操作。最後,用戶就能在源碼庫中找到Maven創建的分支,如https://192.168.1.103/app/branches/1.1.x/。在這裡,POM中的版本已經升級到了1.1.1-SNAPSHOT。