本文介绍如何使用maven发布项目到SVN,进而对项目进行版本控制。本文相关概念参考自《Maven最佳实践:版本管理》
使用的开发环境如下(需要确定在命令行窗口里可以运行svn --version; mvn --version命令):
maven3.0.5 |
|
TortoiseSVN-1.8.1 |
安装时需要勾选安装svn命令行工具 |
SVN仓库(SvnRepo) |
需自行配置 |
Maven仓库(MavenRepo) |
使用SVN仓库搭建,具体过程可参考《使用SVN搭建Maven仓库》 |
具体步骤如下:
1.使用TortoiseSVN打开远程SvnRepo,并创建如下目录
相关目录说明如下:
hi-maven |
后面将创建的maven项目名称 |
branch |
用于存放hi-maven的分支项目 |
tag |
用于存放hi-maven的已发布版本的项目 |
trunk |
用于存放hi-maven的主干项目,即当前修改中的最新版本的项目 |
2.在Eclipse里创建hi-maven项目,基本信息如下:
com.bingo.hello
hi-maven
0.0.1-SNAPSHOT
jar
hi-maven
3.打开项目的pom.xml文件,添加如下配置:
相关变量设置(注意:project.svn.scm.url指向SvnRepo仓库,project.svn.maven.repository指向MavenRepo仓库):
UTF-8
http://your_host/SvnRepo
http://your_host/MavenRepo
设置scm信息,指定存放主干项目的svn地址:
${project.svn.scm.url}
scm:svn:${project.svn.scm.url}/${artifactId}/trunk
scm:svn:${project.svn.scm.url}/${artifactId}/trunk
设置部署信息,指定部署项目的Maven仓库(请自行在settings.xml里配置服务器身份认证信息):
maven-release-repository
Maven Release Repository
svn:${project.svn.maven.repository}/release
maven-snapshot-repository
Maven Snapshot Repository
svn:${project.svn.maven.repository}/snapshot
设置wagon插件,用于部署项目到SVN服务器上的Maven仓库:
org.apache.maven.plugins
maven-deploy-plugin
2.7
com.google.code.maven-svn-wagon
maven-svn-wagon
1.4
设置release插件,用于发布项目到SVN仓库:
注1:此插件需要使用svn.exe执行svn命令,因此必须确保在命令行窗口里可以执行svn命令
注2:此插件也可配置maven-scm-plugin使用javasvn执行svn命令,但是目前仅支持svn1.7
org.apache.maven.plugins
maven-release-plugin
2.4.1
${project.svn.scm.url}/${artifactId}/tag
4.打开命令行窗口,切换到hi-maven项目根目录,运行mvn deploy命令,把项目部署到MavenRepo仓库。部署结果如下,因为当前项目版本号为0.0.1-SNAPSHOT,所以项目部署到了MavenRepo/snapshot目录下:
5.接着介绍项目发布。在项目根目录下,右键-->TortoiseSVN-->Import...,把项目导入SVN仓库的SvnRepo/hi-maven/trunk/hi-maven目录下作为主干项目。接着再右键-->SVN Checkout...,把刚才导入的项目重新checkout到项目根目录下(直接覆盖现有的文件),checkout出的项目如下:
6.在步骤4的命令行窗口里运行mvn release:prepare(在执行命令时会提示输入新的版本号等信息,直接选择默认值即可):
注1:运行此命令前,需要把所有已修改的文件签入SVN
注2:只能在命令行窗口运行此命令,如果在Eclipse里运行,会提示无法执行svn命令等错误
注3:如果报错,可再运行mvn release:rollback回滚前一次发布过程
运行此命令会执行如下操作:
(1) 把项目版本号改为0.0.1,然后上传到SvnRepo/hi-maven/tag/hi-maven-0.0.1/hi-maven/目录
(2) 把项目版本号改为0.0.2-SNAPSHOT,然后上传到SvnRepo/hi-maven/trunk/hi-maven/目录
7.接着在命令行窗口运行mvn release:perform发布项目,此命令将下载步骤6迁入的hi-maven-0.0.1项目到本地进行编译,然后把编译结果打包部署到maven仓库,如图(因为项目版本号为0.0.1,所以发布到MavenRepo/release目录下):
8.如果有需要,可运行mvn deploy,把hi-maven的0.0.2-SNAPSHOT部署到Maven仓库,如图:
顺便一提,如果不使用Maven,操作步骤如下:
1.把hi-maven(0.0.1-SNAPSHOT)迁入trunk/hi-maven目录下
2.把hi-maven(0.0.1-SNAPSHOT)手工部署到MavenRepo/snapshot目录下
3.修改版本号为0.0.1,把hi-maven(0.0.1)迁入tag/hi-maven-0.0.1目录下
4.把hi-maven(0.0.1)手工部署到MavenRepo/release目录下
5.修改版本号为0.0.2-SNAPSHOT,把hi-maven(0.0.2-SNAPSHOT)迁入trunk/hi-maven目录下
6.把hi-maven(0.0.2-SNAPSHOT)手工部署到MavenRepo/snapshot目录下