使用maven和svn进行版本控制

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)的版本。

原文地址:https://www.cnblogs.com/ljgeng/p/9934513.html