本文介绍如何使用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项目,基本信息如下:
<groupId>com.bingo.hello</groupId>
<artifactId>hi-maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hi-maven</name>
3.打开项目的pom.xml文件,添加如下配置:
相关变量设置(注意:project.svn.scm.url指向SvnRepo仓库,project.svn.maven.repository指向MavenRepo仓库):
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.svn.scm.url>http://your_host/SvnRepo</project.svn.scm.url>
<project.svn.maven.repository>http://your_host/MavenRepo</project.svn.maven.repository>
</properties>
设置scm信息,指定存放主干项目的svn地址:
<scm>
<url>${project.svn.scm.url}</url>
<connection>scm:svn:${project.svn.scm.url}/${artifactId}/trunk</connection>
<developerConnection>scm:svn:${project.svn.scm.url}/${artifactId}/trunk</developerConnection>
</scm>
设置部署信息,指定部署项目的Maven仓库(请自行在settings.xml里配置服务器身份认证信息):
<distributionManagement>
<repository>
<id>maven-release-repository</id>
<name>Maven Release Repository</name>
<url>svn:${project.svn.maven.repository}/release</url>
</repository>
<snapshotRepository>
<id>maven-snapshot-repository</id>
<name>Maven Snapshot Repository</name>
<url>svn:${project.svn.maven.repository}/snapshot</url>
</snapshotRepository>
</distributionManagement>
设置wagon插件,用于部署项目到SVN服务器上的Maven仓库:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
<dependencies>
<dependency>
<groupId>com.google.code.maven-svn-wagon</groupId>
<artifactId>maven-svn-wagon</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
</plugin>
设置release插件,用于发布项目到SVN仓库:
注1:此插件需要使用svn.exe执行svn命令,因此必须确保在命令行窗口里可以执行svn命令
注2:此插件也可配置maven-scm-plugin使用javasvn执行svn命令,但是目前仅支持svn1.7
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<tagBase>${project.svn.scm.url}/${artifactId}/tag</tagBase>
</configuration>
</plugin>
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目录下