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