【Maven实战】之版本管理

来源:互联网 发布:红梅白雪知歌词 编辑:程序博客网 时间:2024/05/17 23:27

前言

  • 版本管理:指项目整体版本的演变过程管理。
  • 版本控制:指借助版本控制工具追踪代码的每一个变更。

何为版本管理

  • 对内项目开发,应该使用快照版本
  • 对外发布时,应该提供非常稳定的版本。

发布版本流程

  • 发布版本满足条件如下
    1. 所有自动化测试应该全部通过
    2. 项目没有配置任何快照版本的依赖
    3. 项目没有配置任何快照版本的插件
    4. 项目所包含的代码已经全部提交到版本控制系统中。
  • 将快照版本更新为发布版本。
  • 执行一次Maven构建,以确保项目状态是健康的
以Subversion为例:mvn clean installsvn 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-SNAPSHOT3. 将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参数,运行时就会要求输入密码
原创粉丝点击