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

本文允许转载,但请标明出处:http://blog.csdn.net/wanghantong/article/38424065,
版权所有

现在所说的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参数,运行时就会要求输入密码

爱自己的最好方式就是努力奋斗让自己优秀起来,如果你再颓废,别郁闷没有知己、找不到真爱,因为连你自己都不爱自己,还妄想别人爱你吗?试问,你有什么值得爱,你配吗?往往一个人在乎的不是金钱而是一颗奋斗的心啊!醒悟吧!别再堕落了!

时间: 2024-10-11 15:48:18

Maven详解之------maven版本管理的相关文章

Maven详解之仓库------本地仓库、远程仓库

在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件. Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方) 任何的构件都有唯一的坐标,Maven根据这个坐标定义了构件在仓库中的唯一存储路径, 解读Maven在仓库中的存储路径: 1.基于groupId准备路径,将句点分隔符转成路径分隔符,就是将  "."  转换成 "/" ; example: org.testng --->o

maven详解之坐标与依赖

看着简单而又复杂的pom.xml文件,看似熟悉,当自己编写的时候觉得简单,但是看人家项目的时候又觉得复杂的很,现在我们一起来分析这个pom文件. Maven的坐标为各种构件引入了秩序,任何一个构件都必须明确的定义自己的坐标,maven的坐标包括如下的元素: groupId: 定义当前Maven项目隶属的实际项目 artifactId: 该元素定义实际项目中的一个Maven项目或模块 version: 该元素定义Maven项目当前所处的版本 packaging: 该元素定义Maven项目的打包方式

maven详解之生命周期与插件(一)

Maven是一个优秀的项目管理工具,它能够帮你管理编译.报告.文档等. Maven的生命周期: maven的生命周期是抽象的,它本身并不做任何的工作.实际的工作都交由"插件"来完成. maven的每个构建步骤都可以绑定一个或多个插件行为,而且maven为大多数的构建步骤编写并绑定了默认插件. 三套生命周期: clean.default.site clean: 主要目的是清理项目 pre-clean: 执行一些清理前需要完成的工作 clean: 清理上一次构建生成的文件 post-cle

Maven详解之聚合与继承

说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高,软件本身也变得越来越复杂,然后软件设计人员开始采用各种方式进行开发,于是就有了我们的分层架构.分模块开发,来提高代码的清晰和重用.针对于这一特性,maven也给予了相应的配置. 情景分析一: 我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可

Maven详解及其环境配置

Maven详解 一.前言     以前做过的项目中,没有真正的使用过Maven,只知道其名声很大,其作用是用来管理jar 包的.最近一段时间在项目过程中使用Maven,用Maven构建的web项目,其项目结构只停留在了解阶段,没有深入的使用与理解,刚好最近看了一篇关于Maven的详解:就开始深入学习一下Maven的具体应用. 二.Maven的作用 在开发中,为了保证编译通过,我们会到处去寻找jar包,当编译通过了,运行的时候,却发现"ClassNotFoundException",我们

(转载)maven详解

转载: http://www.cnblogs.com/hongwz/p/5456578.html Maven详解 一.前言     以前做过的项目中,没有真正的使用过Maven,只知道其名声很大,其作用是用来管理jar 包的.最近一段时间在项目过程中使用Maven,用Maven构建的web项目,其项目结构只停留在了解阶段,没有深入的使用与理解,刚好最近看了一篇关于Maven的详解:就开始深入学习一下Maven的具体应用. 二.Maven的作用 在开发中,为了保证编译通过,我们会到处去寻找jar包

Maven详解(转载)

Maven详解 一.前言     以前做过的项目中,没有真正的使用过Maven,只知道其名声很大,其作用是用来管理jar 包的.最近一段时间在项目过程中使用Maven,用Maven构建的web项目,其项目结构只停留在了解阶段,没有深入的使用与理解,刚好最近看了一篇关 于Maven的详解:就开始深入学习一下Maven的具体应用. 二.Maven的作用 在开发中,为了保证编译通过,我们会到处去寻找jar包,当编译通过了,运行的时候,却发现"ClassNotFoundException",我

Maven详解 之 聚合与继承

说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高,软件本身也变得越来越复杂,然后软件设计人员开始采用各种方式进行开发,于是就有了我们的分层架构.分模块开发,来提高代码的清晰和重用.针对于这一特性,maven也给予了相应的配置. 情景分析一: 我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可

maven详解之生命周期与插件(二)

插件配置 定义解释:插件目标 当我们了解了maven插件之后,我们发现如果为每一个功能编写一个独立的插件显然是不可取的,因为这些任务背后有很多可以复用的代码,因此,把这些功能聚集在一个插件里,每一个功能我们就称之为一个插件目标. 举个例子: maven-dependency-plugin有十多个目标,每个目标对应了一个功能 分析项目依赖:dependency:analyze 列出项目依赖树:dependency: tree 列出项目所有已解析的依赖:dependency:list POM中插件全