如何使用maven優雅地管理專案版本號
作者:syonChao
使用maven管理專案版本號
背景
經過一年的開發時間,採用spring MVC的框架建立的maven專案從最初的設立到目前的多功能的開發,經歷了很多功能版本的迭代,但是之前一直忙於專案開發,並沒有詳細管理專案的分支以及tag,直到出現一個問題。
我們的專案於去年9月份上線生產環境,由於系統穩定執行,就一直沒有跟隨我們的專案升級,直到最近,生產環境有一個新的需求,不需要接入目前最新的專案版本(代價太大),只需要在之前程式碼的基礎上新加一個功能即可,但是本人作為專案程式碼負責人有點慌,因為不記得當時用的程式碼是具體哪一個版本,不好拉取程式碼修改,針對這種教訓,毅然決定管理好程式碼版本更迭。
前端展示或者介面查詢專案版本號
查詢以前的專案版本號,可以使用前端展示或者介面查詢的方式,作為一個記錄,原理是將專案的版本號寫在配置檔案(application.properties)中,java程式碼讀取即可,但是每次更新版本,總覺得這樣寫比較low,因為pom檔案中有專案的版本號,直接讀取pom檔案中的版本號不就可以了嘛。java能直接讀取pom檔案的內容嗎?答案是:不可以,但是我們可以換一個方式,在maven構建專案的時候將pom檔案中的版本號寫入到配置檔案中。
1. 在src\main\resources\application.properties放置如下內容
version =${project.version}
2. 配置pom.xml
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
3. maven構建專案
執行maven package,
檢視生成的配置檔案中的application.properties, version值已經變成了pom.xml中的version
新的問題
一個maven工程,如果只是一個單一的主專案,那麼只要手動修改一下pom.xml就可以了,耗不了多少時間。但是如果這個maven專案有很多的子模組專案,那麼一個個手動的去改就比較複雜了,如下圖:
規範
1、同一專案中所有模組版本保持一致
2、子模組統一繼承父模組的版本
3、統一在頂層模組Pom的節中定義所有子模組的依賴版本號,子模組中新增依賴時不要新增版本號
4、開發測試階段使用SNAPSHOT
5、生產釋出使用RELEASE
6、新版本迭代只修改頂層POM中的版本
如下兩圖,圖一表示根目錄pom檔案,圖二表示web模組pom檔案,如果手動修改,則每次都需要修改父pom和各個子pom檔案中版本號,很是複雜。
解決方案
在子目錄中使用${project.version},但是這隻針對於依賴的jar包,對於模組版本號沒有作用。使用maven命令修改(很多文章說需要使用外掛versions-maven-plugin),但是本人測試不使用外掛也可以成功。
前提:maven安裝成功
執行命令:
mvn versions:set -DnewVersion=2.3-SNAPSHOP
2.3-SNAPSHOP表示新的版本號,然後可以檢視,各個模組已經更新了版本號。
附:versions-maven-plugin外掛的使用
在父pom檔案中新增
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.3</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
</plugins>
</build>
總結
在專案程式碼中將版本號確定後,釋出到環境,然後將該版本打tag,以後如果發現環境有bug(或者新增新功能),先查詢該環境對應的專案版本號,然後根據該版本新建release分支,修改即可。