maven-release-plugin 介绍
插件会帮助我们升级pom版本,提交,打tag,然后再升级版本,再提交,等等。基本配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.5</version>
<configuration>
<tagBase>svn tag 目录地址</tagBase>
</configuration>
</plugin>
configuration元素下的tagBase元素,它代表了我们svn中的tag目录
插件最主要的命令有三个
- release:prepare
- release:rollback
- release:perform
release:prepare 准备版本发布,确保你的所有代码都提交了,如果你有未提交代码,release插件会报错。添加 -Darguments="-DskipTests" 跳过测试
release:rollback 回退release:prepare所执行的操作。将POM回退至release:prepare之前的状态,并提交。需要注意的是,该步骤不会删除release:prepare生成的标签,因此用户需要手动删除。
release:perform 执行版本发布。签出release:prepare生成的标签中的源代码,并在此基础上执行mvn deploy命令打包并部署构件至仓库。
如果你所发布项目的打包类型为jar,在执行release:perform之后,不仅项目的主构件会被生成并发布到仓库中,基于该主构件的-sources.jar和-javadoc.jar也会生成并发布。在执行mvn release:perform时默认会生成api文档,如果默写注释不符合规范的话会造成构建失败,可以加参数-DuseReleaseProfile=false取消构建api文档,或则需要根据规范书写注释。
关于版本控制
- 问题1: 团队协作开发,对方引用了我的项目,如何让他能够实时获取到我的更新;
- 问题2: 一个版本开发完毕,该怎么发布;
- 问题3: 我正在开发1.2.x版本,但是1.1.x版还有人在用,要怎么去维护;
问题1
使用工具默认生成的pom 版本是 0.0.1-SNAPSHOT, 快照版一般是开发过程中使用的,在pom添加分发管理distributionManagement,如
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Releases</name>
<url>release-url</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Snapshots</name>
<url>snapshot-url</url>
</snapshotRepository>
</distributionManagement>
当运行 mvn clean deploy 时,会将项目打包上传到snapshotRepository中,而且在版本后默认添加日期时间,当其他人员使用这个项目时,maven会自动使用最新的一个快照版本,默认每天更新一次,也可以使用-U参数强制更新。
问题2
如果正常的开发,当完成0.0.1版本的开发时,需要将该版本发布到仓库中,手动更新一般步骤是:
- 在trunk中,更新pom版本从0.0.1-SNAPSHOT到0.0.1
- 对0.0.1打一个svn tag
- 针对tag进行mvn deploy,发布正式版本
- 更新trunk从0.0.1到0.0.2-SNAPSHOT
可以发现使用maven-release-plugin插件正好可以解决上述手动更新问题。
问题3
这类问题是比较常见的,一般解决方式就是创建分支,可以使用svn copy命令创建一个新的分支,或者仍然可以用maven-release-plugin解决该问题
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.5</version>
<configuration>
<tagBase>svn tag 目录地址</tagBase>
<branchBase>svn 分支目录地址</branchBase>
</configuration>
</plugin>
添加一个branchBase来指定分支目录,执行完release:perform之后再执行release:branch
mvn release:branch -DbranchName=0.0.x -DupdateBranchVersions=true -DupdateWorkingCopyVersions=false
指定branch的名称为0.0.x,表示这里会有版本0.0.1, 0.0.2等等。updateBranchVersions=true的意思是在分支中更新版本,而updateWorkingCopyVersions=false是指不更改当前工作目录(这里是trunk)的版本。