《使用Maven插件修改工程版本号》中提到修改maven工程的版本号,最终没有一个完美的解决方案,其实最终修改好版本号之后还是需要使用deploy命令发布到私有Maven服务器上面的,Maven Release插件可以自动执行整个的发布过程,主要包括:将当前的SNAPSHOT版本号修改为正式版,然后在SCM服务器(SVN或git)上打一个该版本的tag,编译程序并自动生成jar包、source源码包和javadoc文档包然后发布到指定的maven服务器上,最后将当前的版本号增加为新的版本号并修改为SNAPSHOT,这样就相当于一个自动构建的流程了。
不过为了能够正常实现上面的流程,还需要注意几个地方:
1. 需要在本地安装一个scm客户端,这里使用了svn客户端,windows下推荐下载Subversion for Windows,需要跟项目存放的svn server的版本一致,在http://sourceforge.net/projects/win32svn/files/中列出了各种版本的客户端。安装之后需要确定在命令行下面可以正常执行svn命令。
2. 确保可以执行mvn deploy命令,需要在maven的配置文件中设置发布服务器端的用户名和密码,并且其id需要与项目pom文件中定义的distributionManagement下面的repository(正式版)和snapshotRepository(测试版)中的id一致。
3. 在父工程的pom.xml文件中定义scm信息及配置release plugin插件:
./pom.xml中的关键信息
代码如下 | 复制代码 |
<project> <!-- SCM信息 --> <scm> <!-- 只读的scm连接 --> <connection>scm:svn:http://192.168.1.200/svn/framework/trunk</connection> <!-- 可写的scm连接 --> <developerConnection>scm:svn:http://192.168.1.99/200/framework/trunk</developerConnection> <url>http://192.168.1.99/svn/framework/trunk</url> </scm> <!-- 设定团队Maven服务器 --> <distributionManagement> <repository> <id>nexus-releases</id> <name>Local Nexus Repository</name> <url>http://192.168.1.200:8080/content/repositories/releases</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Local Nexus Repository</name> <url>http://192.168.1.200:8080/content/repositories/snapshots</url> </snapshotRepository> </distributionManagement> <!-- 编译配置 --> <build> <!-- 插件 --> <plugins> <!-- 发布插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.5.3</version> <configuration> <preparationGoals>package deploy</preparationGoals> <autoVersionSubmodules>true</autoVersionSubmodules> <!-- 项目打 tag 的 scm 路径配置信息 --> <tagBase>http://192.168.1.99/svn/lingsee.framework/tags</tagBase> <!-- 不使用默认的profile --> <useReleaseProfile>false</useReleaseProfile> <!-- 在发布时不检查是否提交 svn 的文件过滤配置 --> <checkModificationExcludes> <checkModificationExclude>.project</checkModificationExclude> <checkModificationExclude>.settings</checkModificationExclude> <checkModificationExclude>.classpath</checkModificationExclude> <checkModificationExclude>**\.project</checkModificationExclude> <checkModificationExclude>**\.settings</checkModificationExclude> <checkModificationExclude>**\.classpath</checkModificationExclude> </checkModificationExcludes> </configuration> </plugin> </plugins> </build> </project> |
设置好之后可以执行mvn命令,命令列表如下:
release:clean 清除一些插件生成的相关文件
release:prepare 准备发布,相当于发布前的准备。此命令会首先去去掉版本号中的SNAPSHOT标志符,在svn服务器生成一个指定版本的tag,编译并打包项目
release:perform 正式发布提交
release:rollback 回滚,如果prepare的过程中出现了错误可以执行此命令回滚prepare的操作。有两点需要注意:一是在svn服务器上创建的tag无法删除;二是如果执行了release:clean命令的话,无法进行回滚
默认情况下Release插件会将源码和javadoc进行打包,如果想自己控制的话需要在插件的configuration中设置useReleaseProfile为false,这样跟直接使用mvn deploy进行项目发布的情况一致了。