Maven实战读书笔记(14)

什么是版本管理?git

版本管理是指项目总体版本的演变过程管理,如从1.0-SNAPSHOT1.0再到1.1-SNAPSHOTapache

 

什么是版本控制?浏览器

版本控制是指借助版本控制工具(如Subversion)追踪代码的每个变动安全

 

何时能够将快照版本更新为发布版本架构

1、全部自动化测试应当所有经过并发

2、项目没有配置任何快照版本的依赖app

3、项目没有配置任何快照版本的插件maven

4、项目所包含的代码已经所有提交到版本控制系统中svn

 

Maven的版本号定义约束工具

可能有个版本号是这样的,1.3.4-beta-2

Maven的版本号定义约定是这样的,<主版本>.<次版本>.<增量版本>-<里程碑版本>

1、主版本:表示项目的重大架构变动

2、次版本:表示较大范围的功能增长和变化

3、增量版本:通常表示重大Bug的修复

4、里程碑版本:顾名思义,这每每指某一个版本的里程碑。例如,Maven 3已经发布了不少里程碑版本,如3.0-alpha-13.0-alpha-23.0-beta-1等,这样的版本与正式的3.0相比,每每表示不是很是稳定,还须要不少测试

 

关于版本号须要注意的地方

1、不是每一个版本号都必须拥有这四个部分,通常来讲,主版本和次版本都会声明,但增量版本和里程碑就不必定了

2、当用户在声明依赖或插件未声明版本时,Maven就会根据上述版本号约定自动解析最新版本。这个时候就须要对版本号进行排序,对于主版本、次版本和增量版原本说,比较是基于数字的,所以1.5>1.4>1.3.11>1.3.9。而对于里程碑版本,Maven则只进行简单的字符串比较,所以会获得1.2-beta-3>1.2-beta-11的结果

 

理解主干、标签与分支

1、主干:项目开发代码的主体,是从项目开始直到当前都处于活动的状态。从这里能够得到项目最新的源代码以及几乎全部的变动历史

2、分支:从主干的某个点分离出来的代码拷贝,一般能够在不影响主干的前提下在这里进行重大Bug的修复,或者作一些实验性质的开发。若是分支达到了预期的目的,一般发生在这里的变动会被合并(merge)到主干中

3、标签:用来标识主干或者分支的某个点的状态,以表明项目的某个稳定状态,这一般就是版本发布时的状态

 

使用Maven管理项目版本,可能有这样的场景

项目最初的版本是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的开发过程当中

 

使用Maven Release Plugin插件,流程化管理版本发布

Maven Release Plugin主要有三个目标,它们分别为:

n         releaseprepare,准备版本发布

n         releaserollback,回退releaseprepare所执行的操做

n         releaseperform,执行版本发布

 

releaseperpare目标都作了哪些操做?

n         检查项目是否有未提交的代码

n         检查项目是否有快照版本依赖

n         根据用户的输入将快照版本升级为发布版

n         POM中的SCM信息更新为标签地址

n         基于修改后的POM执行Maven构建

n         提交POM变动

n         基于用户输入为代码打标签

n         对代码从发布版升级为新的快照版

n         提交POM变动

 

releaserollback目标都作了哪些操做?

POM回退至releaseprepare以前的状态,并提交。须要注意的是,该步骤不会删除releaseprepare生成的标签,所以用户须要手动删除

 

releaseperform目标都作了哪些操做?

签出releaseprepare生成的标签中的源代码,并在此基础上执行mvn deploy命令打包并部署构件至仓库

 

另外,使用Maven Release Plugin插件须要注意

1、要为项目发布版本,首先须要为其添加正确的版本控制系统信息

2、这是由于Maven Release Plugin须要知道版本控制系统的主干、标签等地址信息后才能执行相关的操做

 

通常的SCM,版本发布配置SCM信息以下

<project>

...

       <scm>

              <connection>scm:svn:http://10.1.0.56/app/trunk</connection>

              <developerConnection>scm:svn:http://10.1.0.56/app/trunk</developerConnection>

              <url>http://10.1.0.56/account/trunk</url>

       </scm>
...

</project>

对上面配置进行说明

1connection元素表示一个只读的scm地址

2developerConnection元素表示可写的scm地址

3url表示能够在浏览器中访问的scm地址

4、为了让Maven识别,connectiondeveloperConnection必须以scm开头,冒号以后的部分表示版本控制工具类型(这里是svn),Maven还支持cvsgit

5、接下来才是实际的scm

地址,该配置中的connection使用了http协议,而developerConnection则因为涉及写操做,使用https协议进行了保护

 

上面的配置只告诉Maven当前代码的位置(主干),而版本发布还要涉及标签等操做,所以,还须要配置Maven Release Plugin告诉其标签的基础目录

 

配置maven-release-plugin提供标签基础目录

<plugin>

       <groupId>org.apache.maven.plugins</groupId>

       <artifactId>maven-release-plugin</artifactId>

       <version>2.0</version>

       <configuration>

              <tagBase>http://10.1.0.56/app/tags/</tagBase>

       </configuration>

</plugin>

 

在执行releaseprepare以前还有两个注意点

1、系统必需要提供svn命令行工具,Maven须要svn命令行工具执行相关操做,而没法使用图形化工具,如TortoiseSVN

2POM必须配置了可用的部署仓库,由于releaseperform会执行deploy操做将构件发布到仓库中

 

maven-release-plugin提供autoVersionSubmodules参数

使用这个参数,maven-release-plugin会自动为全部子模块使用与父模块一致的发布版本和新的SNAPSHOT版本:

mvn release:prepare -DautoVersionSubmodules=true

 

若是使用release:prepare命令执行的结果没有问题,就执行mvn release:perform命令

这部分会出现不少问题!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

执行release:performrelease:branch命令之后再试

 

如何保障构件的安全性

当从中央仓库下载第三方构件的时候,你可能会想要验证这些文件的合法性,例如它们是由开源项目官方发布的,而且没有被篡改过,一样地,当发布本身项目给客户使用的时候,你的客户也会想要验证这些文件是不是由你的项目组发布的,且没有被恶意篡改过PGP (Pretty Good Privacy)就是这样一个用来帮助提升安全性的技术。PGP最经常使用来给电子邮件进行加密、解密以及提供签名,以提升点子邮件交流的安全性

 

基于PGP标准的GPG

GnuPG (简称GPG,来自http://www.gnupg.org/ PGP标准的一个免费实现,不管是类UNIX平台仍是Windows平台,均可以使用它。GPG可以帮助咱们为文件生成签名、管理密钥以及验证签名等

 

具体如何使用GnuPG之后用到再说吧

相关文章
相关标签/搜索