MavenRelease發(fā)布指南---Git版
1.RELEASE的說明
1.1snapshot與release的區(qū)別
大多數(shù)java開發(fā)的小伙伴都用過maven來對包進行管理扛拨。在自己寫項目的過程中侨颈,對自己的項目也會進行g(shù)roupdId,artifactId,version的配置。下面我們來對著3個配置進行簡單說明。
- groupId:顧名思義帖族,這個里面包含的是本項目屬于哪一個group(即組織或公司)庸毫。一般我們會用公司或者自己的前幾級包名來進行定義冠跷。
- artifactId:這個值定義的是本項目的名字爹凹。
- version:這個就是我們今天講解的關(guān)鍵了厨诸。這個項目在maven進行發(fā)布以后的版本號。
一般禾酱,我們在剛開一個項目以后會將version定義為1.0-SNAPSHOT微酬。snapshot單詞從字面意思來說,是快照颤陶、照相的意思颗管。為什么我們新的項目要使用SNAPSHOT呢?而不是我們引入的那些公共包的.RELEASE或者只有版本號什么都不帶呢滓走?這兩個又有什么區(qū)別呢忙上?聽我慢慢道來:
一個項目在未上線發(fā)布之前會在測試環(huán)境或者開發(fā)環(huán)境中進行測試和調(diào)整,也有可能有需求變更和重構(gòu)闲坎。所以,snapshot說明了茬斧,這個包還未固化其自身提供的服務(wù)腰懂。在使用帶有snapshot的包的時候要特別小心。他很可能發(fā)生變化项秉,不知道什么時候你之前使用的功能就會被這個包的維護人員干掉或者改變了绣溜。
而大家使用的類似Spring之類的公共開源包都是以RELEASE結(jié)尾的,這說明了當(dāng)前這個版本號的包會穩(wěn)定的提供功能服務(wù)娄蔼,不會發(fā)生任何變化怖喻。如果需要變化只能通過修改版本號。
1.2release的必要性
當(dāng)我們的項目達到了當(dāng)前的目標(biāo)岁诉,在經(jīng)過檢測后不需要改變锚沸。這時我們就需要將SNAPSHOT版本打包成RELEASE版本弥咪。只有這樣粒褒,使用這個包的用戶才能放心的將這個版本的包放入自己的項目中使用。并且涝焙,不會擔(dān)心這個功能包提供的功能會隨時發(fā)生改變坠韩。
接下來我們就學(xué)習(xí)如何將在git中管理的功能包從snapshot打包成為release版本
2.scm的配置
scm是mvn為我們提供的距潘,對版本管理軟件進行管理和操作的插件。由于本指南只講解打包過程只搁,不會詳細講解本工具的具體概念和使用方式音比。
<project>
<scm>
<!--release包需要放入的nexus或者其他maven release包的倉庫url地址-->
<url>http://xxxx/nexus/content/repositories/releases/</url>
<!--connection, developerConnection: 都是連接字符串,其中后者是具有write權(quán)限的scm連接 -->
<!--需要打包項目的git地址-->
<developerConnection>scm:git:http://xxxx/c-h5/portal-common-base.git</developerConnection>
<!--需要打包項目的git地址-->
<connection>scm:git:http://xxx/c-h5/portal-common-base.git</connection>
<!---->
<tag>HEAD</tag>
</scm>
</project>
3.maven-release-plugin的配置
<build>
<plugins>
<!-- 發(fā)布插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<!--git用戶名-->
<username>xxxxx@shishike.com</username>
<!--git密碼-->
<password>xxxx</password>
<!--mvn目標(biāo)指令-->
<goals>-f pom.xml deploy</goals>
</configuration>
</plugin>
</plugins>
</build>
4.release的操作流程
4.1第一步release:prepare
這條命令主要是做打包前的準(zhǔn)備氢惋。
- 輸入對應(yīng)的release需要打包的版本等信息洞翩,如果不輸入有默認(rèn)的內(nèi)容
- 將需要記錄和準(zhǔn)備的內(nèi)容緩存到pom.xml目錄下的release.properties文件中
- 在本地和遠程庫的GIT中打上對應(yīng)版本的tag
在準(zhǔn)備過程中還會run 單元測試等phase稽犁,如果沒有異常的話可以繼續(xù)最后一步。如果git還沒有commit或單元測試失敗會導(dǎo)致prepare失敗菱农,這時候你就需要到下面一個命令了缭付。
4.2后悔藥release:rollback
如果在準(zhǔn)備階段發(fā)生錯誤,或者需要修改某些地方的話循未。就需要到這個命令了陷猫,這個命令執(zhí)行以后會做以下這些事
- 刪除線上git庫tag,但是本地庫tag沒有被刪除的妖,需要手動使用git tag -d XXX進行刪除绣檬。如果不將本地庫中的tag刪除將會導(dǎo)致prepare失敗。
- 刪除之前緩存在pom.xml統(tǒng)一目錄下的配置
4.3最后一步release:perform
如果確認(rèn)無誤了以后嫂粟,就可以執(zhí)行perform命令了娇未。這個命令干了以下這些事:
- 驗證代碼合法性
- 將你之前的1.0-SNAPSHOT改為1.1-SNAPSHOT
- 將1.0版本deploy至scm配置的nexus release庫中
- 將代碼source。jar版本 javacode星虹。jar打包上傳至nexus庫
恭喜零抬,你已經(jīng)把你的1.0-SNAPSHOT成功的打包成1.0的release版本了。同時你會發(fā)現(xiàn)你的pom.xml文件會自動的變成1.1-SNAPSHOT版本宽涌。雖然這一系列操作都可以通過手動完成平夜。但是有這個工具的存在,免去了很多步驟卸亮。也規(guī)范了流程忽妒,何樂而不為呢。