maven-release-plugin简介
该插件是maven自带的用于发布项目之用,比如我们用SCM的svn来管理源代码,一般会分为trunk/branches/tags三个目录。 trunk对应主线开发,一般对应的是SNAPSHOT版本,而branches可以是从trunk copy to的一个修复的小版本,也可以是从 tags copy to的一个要修复的版本,同样对应的是SNAPSHOT版本。仅有tags下面的项目的版本号定义为release。 至于maven下的release与snapshot的区别,不清楚的同学可以猛击:http://www.mzone.cc/article/277.html
官网地址: http://maven.apache.org/maven-release/maven-release-plugin/
如何用好maven-release-plugin
在实际开发中,为了方便修复bug,以及准备测试程序包。按照规范流程都需要将开发程序打包成tag,然后将程序发布出去。 那么我就经常需要从 1.0-SNAPSHOT到1.0到1.1-SNAPSHOT 这样的操作。对于项目个数比较少的情况,手动修改也未尝不可。 对于比较复杂的系统,分成了大量的服务,业务模块的,少则7,8个多者20+个。笔者在实际应用中的就是包含有20多个工程。 在没有应用release插件的时候,基本上负责发布的同学很头疼,也想办法用shell脚本去改pom的版本号。但是还是稍显麻烦。
1.0-SNAPSHOT到1.0到1.1-SNAPSHOT
SNAPSHOT是快照的意思,项目到一个阶段后,就需要发布一个正式的版本(release版本)。一次正式的发布需要这样一些工作:
在trunk中,更新pom版本从1.0-SNAPSHOT到1.0
对1.0打一个svn tag
针对tag进行mvn deploy,发布正式版本
更新trunk从1.0到1.1-SNAPSHOT
SCM
首先我们需要在POM中加入scm信息,这样Maven才能够替你完成svn操作,示例配置如下:
1 2 3 4 5 6 |
|
maven-release-plugin 应用配置
紧接着,我们需要配置maven-release-plugin,这个插件会帮助我们升级pom版本,提交,打tag,然后再升级版本,再提交,等等。配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
从上面的配置可以知道,需要配置svn提交的用户名和密码以及svn安装目录,还有就是svn提交的注释(可选)。 另外在release插件打包发布到似有远程仓库的部分需要配置:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
执行、操作 Action
mvn release:prepare
执行过程中,你会遇到这样的提示:
What is the release version for “Unnamed - org.myorg:myapp:jar:1.0-SNAPSHOT”? (org.myorg:myapp) 1.0: :
——“你想将1.0-SNAPSHOT发布为什么版本?默认是1.0。”我要的就是1.0,直接回车。
What is SCM release tag or label for “Unnamed - org.myorg:myapp:jar:1.0-SNAPSHOT”? (org.myorg:myapp) myapp-1.0: :
——“发布的tag标签名称是什么?默认为myapp-1.0。”我还是要默认值,直接回车。
What is the new development version for “Unnamed - org.myorg:myapp:jar:1.0-SNAPSHOT”? (org.myorg:myapp) 1.1-SNAPSHOT: :
——“主干上新的版本是什么?默认为1.1-SNAPSHOT。”哈,release插件会自动帮我更新版本到1.1-SNAPSHOT,很好,直接回车。
然后屏幕刷阿刷,maven在build我们的项目,并进行了一些svn操作,你可以仔细查看下日志。
那么结果是什么呢?你可以浏览下svn仓库:
我们多了一个tag:https://svn-address.com/myapp/tags/myapp-1.0/ 这就是需要发布的版本1.0。 再看看trunk中的POM,其版本自动升级成了1.1-SNAPSHOT。
这不正是我们想要的么?等等,好像缺了点什么,对了,1.0还没有发布到仓库中呢。
再一次屏住呼吸,执行:
mvn release:perform
maven-release-plugin会自动帮我们签出刚才打的tag,然后打包,分发到远程Maven仓库中,至此,整个版本的升级,打标签,发布等工作全部完成。我们可以在远程Maven仓库中看到正式发布的1.0版本。
这可是自动化的 ,正式的 版本发布!
注意点
svn client的版本号,1.6的版本执行的时候需要手动确认版本号, 1.7不需要。
maven项目中的依赖其他的jar包,不能是SNAPSHOT版本的。(同时开发的项目可以用module的形式引入)。
从trunk打branches、tags以及从tags打branches、或者从branches打tags以上命令都支持,一般执行release:perform都需要先执行release:prepare.
修改trunk的版本号或者branches的版本号,可以用release:update-versions命令。