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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM