1. 程式人生 > >【Maven實戰】之版本管理

【Maven實戰】之版本管理

前言

  • 版本管理:指專案整體版本的演變過程管理。
  • 版本控制:指藉助版本控制工具追蹤程式碼的每一個變更。

何為版本管理

  • 對內專案開發,應該使用快照版本
  • 對外發布時,應該提供非常穩定的版本。

釋出版本流程

  • 釋出版本滿足條件如下
    1. 所有自動化測試應該全部通過
    2. 專案沒有配置任何快照版本的依賴
    3. 專案沒有配置任何快照版本的外掛
    4. 專案所包含的程式碼已經全部提交到版本控制系統中。
  • 將快照版本更新為釋出版本。
  • 執行一次Maven構建,以確保專案狀態是健康的
以Subversion為例:
mvn clean install
svn commit pom.xml -m "prepare to release 1.0"
svn copy -m "tag release 1.0"

Maven的版本號定義約定

  • eg:1.3.4-beta-2
  • 【1】代表該版本是第一個重大版本;【3】表示這是基於重大版本的第三個次要版本;【4】表示該次要版本的第四個增量版本;【beta-2】表示該增量的某一個里程碑。約定如下:
  • <主版本>.<次版本>.<增量版本>-<里程碑版本>
  • 主版本:標示專案的重大架構變更
  • 次版本:表示較大範圍的功能增加和變化
  • 增量版本:一般標示重大Bug的修復。
  • 里程碑版本:往往指某一個版本的里程碑

主幹,標籤和分支

  • 主幹:專案開發程式碼的主體,是從專案開始知道當前都處於活動狀態。從這裡可以獲取專案最新的原始碼以及幾乎所有的變更歷史。
  • 分支:從主幹的某個點分離出來的程式碼拷貝,通常可以在不影響主幹的前提下在這裡進行重大bug的修復,或者做一些實驗性質的開發。如果分支達到預期的目的,通常發生在這裡的變更會被合併到主幹中。
  • 標籤:用來標示主幹或者分支的某個點的狀態,以代表專案的某個穩定狀態,這通常就是版本釋出時的狀態。

自動化版本釋出

  • 使用【Maven Release Plugin】工具來將這一流程自動化,
  • 【Maven Release Plugin】主要有三個目標:
  • release:prepare:準備釋出版本
 (1)檢查專案是否有未提交的程式碼
(2)檢查專案是否有快照版本依賴
(3)檢查使用者的輸入將快照版升級為釋出版
(4)將pom中得scm資訊更新為標籤地址
(5)基於修改後的pom執行maven構建
(6)提交pom變更
(7)基於使用者輸入為程式碼打標籤
(8)將程式碼從釋出版升級為新的快照版
(9)提交pom變更
  • release:rollback:回退release:prepare的所有變更 但是不會刪除svn標籤 需要手工刪除
  • release:perform:執行版本釋出 牽出
  • release:prepare:簽出prepare階段生成標籤中的原始碼,並在此基礎上執行mvn deploy打包並部署構件到倉庫。

使用流程

  • POM配置如下:
<scm>
 <connection>scm:svn:http://192.168.1.103/app/trunk</connection> --表示只讀的scm地址
 <developerConnection>scm:svn:https://192.168.1.103/app/trunk</developerConnection>--表示一個可寫的scm地址
 <url>http://192.168.1.103/account/trunk</url>--表示可在瀏覽器訪問的url地址
</scm>

<plugin>
 <groupId>org.apache.maven.plugins</>
 <artifactId>maven-release-plugin</artifactId>
 <version>2.0</version>
 <configuration>
  <tagBase>https://192.168.1.103/app/tags/</tagBase>
 </configuration>
</plugin>
注意:
1、本機必須安裝命令列可用的svn 2、pom必須配置了可用的部署倉庫
  • 執行【mvn release:prepare】
  • 如果要保持聚合專案中的模組的釋出版本或者快照版本保持一致,則使用以下命令預設子父模組一致版本一致。
mvn relase:prepare -DautoVersionSubmodules=true
  • 如果報錯使用【release:rollback】回滾,如果正確使用【mvn release:perform】

自動化建立分支

  • 【Maven release Plugin】branch目標,自動化以下操作
1. 檢查本地有無未提交的程式碼
2. 將分支更改POM的版本號。如:1.1.0-SNAPSHOT改成1.1.1-SNAPSHOT
3. 將POM中的SCM資訊更新為分支地址
4. 提交以上更改
5. 將主幹程式碼拷貝到分支中
6. 改動原生代碼使其回退到分支前的版本號(使用者能夠指定新的版本號)
7. 提交本地更改
  • pom部分配置如下
<scm>
 <connection>scm:svn:http://192.168.1.103/app/trunk</connection> --表示只讀的scm地址
 <developerConnection>scm:svn:https://192.168.1.103/app/trunk</developerConnection>--表示一個可寫的scm地址
 <url>http://192.168.1.103/account/trunk</url>--表示可在瀏覽器訪問的url地址
</scm>
.....
<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.3</version>
                <configuration>
                    <tagBase>http://192.168.1.103/app/tags/</tagBase>
                    <branchBase>http://192.168.1.103/app/branches/</branchBase>
                </configuration>
            </plugin>
  • 執行mvn命令
mvn release:branch -DbranchName = 1.1.X  -DupdateBranchVersions=true -DupdateWorkingCopyVersions=false

 -DbranchName = 1.1.X 新建立分支名稱
 -DupdateBranchVersions=true表示為新分支採用新的版本。
-DupdateWorkingCopyVersions=false 表示不更新原生代碼的版本

GPG簽名

  • PGP(Pretty Good Privacy)經常用來給電子郵件進行加密,解密以及提供簽名,以提高電子郵件的交流的安全性。
  • GnuPG 是PGP標準的一個免費實現

Maven GPG Plugin 使用流程

  • 確認命令列下的GPG是否可用。
  • POM部分配置
<plugins>
        <!--編譯外掛-->
        <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>
</plugins>
  • 使用mvn命令簽名
mvn clean deploy -Dgpg.passphrase=yourpassphrase
如果不提供-Dgpg.passphrase引數,執行時就會要求輸入密碼