maven+svn版本控制详谈

        LZ最近在公司里开发一套公司自己的项目框架,并且封装了一些类库,采用的是maven来构建项目,每个项目都会涉及到版本的更新,maven项目一般的升级步骤是:

        1、通过mvn deploy命令发布当前版本到maven仓库

        2、将当前版本在svn服务器上打上一个标签

        3、修改每个maven项目的pom.xml,改变所有版本为新版本

        这样做当然没有任何问题,但是如果版本更新速度很快,一天甚至可能发布N个项目,那么每次都重复这样的步骤,那你离死也不远了,所有LZ想到了版本的自动管理,要做这样的工作首先需要准备工作:

         1、搭建maven仓库

         2、本地计算机安装能够在命令行工作的svn

        maven+svn版本控制详谈_第1张图片

       3、下载maven

       4、安装maven,并且设置环境变量

       在使用过程中,LZ也遇到了很多问题,并且网上也没有什么解决方案,为了不让大家走很多弯路,LZ把自己遇到的一些问题提出来。

       我们把maven下载后,解压到当前要使用版本管理的项目的根目录下,并改命为EMBEDDED,如图:

       maven+svn版本控制详谈_第2张图片

        因为当你构建的时候,maven会到该目录下去找bin/mvn.bat,文件,然后进入EMBEDDED/bin将mvn.cmd改命为mvn.bat,再用文本编辑器打开该文件,搜索“mvn.cmd”,改成"mvn.bat",如:

            maven+svn版本控制详谈_第3张图片

        设置环境变量:

        在path中加入:

       然后打开命令行,输入mvn -version 没有报错说明maven安装成功

      接下来,我们来看怎么样才能实现版本自动管理,要做自动版本管理,少不了maven的一个插件:maven-release-plugin,我们将该插件加入到plugin中:

     

  
      org.apache.maven.plugins  
      maven-release-plugin  
      2.5.3
        
        http://192.168.1.242/svn/java/sunsharp/tags/
        liyi
  		li897yi
  		release
  		
  			.project
  			EMBEDDED
  			release.properties
  			sunsharp-module\.project
  			sunsharp-module\sunsharp-dao\.classpath
  			sunsharp-module\sunsharp-dao\.project
  			sunsharp-module\sunsharp-dao\.settings
  			sunsharp-module\sunsharp-encrypt\.classpath
  			sunsharp-module\sunsharp-encrypt\.project
  			sunsharp-module\sunsharp-encrypt\.settings
  			sunsharp-module\sunsharp-http\.classpath
  			sunsharp-module\sunsharp-http\.project
  			sunsharp-module\sunsharp-mail\.classpath
  			sunsharp-module\sunsharp-mail\.project
  			sunsharp-module\sunsharp-redis\.classpath
  			sunsharp-module\sunsharp-redis\.project
  			sunsharp-module\sunsharp-upload\.classpath
  			sunsharp-module\sunsharp-upload\.project
  			sunsharp-module\sunsharp-utils\.classpath
  			sunsharp-module\sunsharp-utils\.project
  			sunsharp-module\sunsharp-web\.classpath
  			sunsharp-module\sunsharp-web\.project
  		
        
      

因为在构建的时候,他会提交到svn上去,所有发现有.project,.classpath都会报错,所以需要自己过滤掉,然后再配置scm:

  
      scm:svn:http://192.168.1.242/svn/java/sunsharp/sunsharp/  
      scm:svn:http://192.168.1.242/svn/java/sunsharp/sunsharp/
      http://192.168.1.242/svn/java/sunsharp/sunsharp/  
      
你要发布到maven仓库,肯定需要指定maven仓库地址:


		
			releases
			Internal Releases
			
				http://192.168.1.241:8081/nexus/content/repositories/releases
			
		
		
			snapshots
			Internal Snapshots
			
				http://192.168.1.241:8081/nexus/content/repositories/snapshots
			
		
		
如果采用插件自动发布,是会发布到releases中去的,如果仓库配置了登录权限的,这里需要在settings.xml中配置,如:

    
		releases    
		admin    
		******    
	     
这样准备工作算是完成了,我们可以使用命令:

mvn release:clean 清除记录

mvn release:prepare:准备工作,他会检查是否有代码没有提交,如果没有提交会报错,如果版本号不是以SNAPSHOT结束的也会报错,在执行前需要在指定的svn tag目录下创建一个目录,命名规则是项目名-版本号,例如LZ这里就是sunsharp-1.0.0,否则他会提示找不到目录

mvn release:perform 执行,他会改变pom.xml的版本号为下一个版本,执行deploy发布到maven仓库的release中

mvn release:rollback 回滚,如果觉得当前有问题可以执行回滚

具体release的用法可以百度查找,里面有很多参数设置,可以设置当前版本,下一个版本,可以设置试运行(-DtryRun=true),在测试阶段最好加上这个参数,加上后执行perform命令,不会真正的提交到仓库,等没有报错了再去掉这个参数,然后就可以真正的发布到maven仓库中了。

LZ在使用过程中也遇到了很多问题,通过不懈努力才得以解决,各位童鞋在使用过程中可能也会遇到一些问题,如果不懂的可以给我留言,我看到后会第一时间回复。

       


你可能感兴趣的:(java)