來(lái)源:http://t.cn/EJ4Wowq
大多數java開(kāi)發(fā)的小伙伴都用過(guò)maven來(lái)對包進(jìn)行管理。在自己寫(xiě)項目的過(guò)程中,對自己的項目也會(huì )進(jìn)行g(shù)roupdId,artifactId,version的配置。下面我們來(lái)對著(zhù)3個(gè)配置進(jìn)行簡(jiǎn)單說(shuō)明。
groupId:顧名思義,這個(gè)里面包含的是本項目屬于哪一個(gè)group(即組織或公司)。一般我們會(huì )用公司或者自己的前幾級包名來(lái)進(jìn)行定義。
artifactId:這個(gè)值定義的是本項目的名字。
version:這個(gè)就是我們今天講解的關(guān)鍵了。這個(gè)項目在maven進(jìn)行發(fā)布以后的版本號。
一般,我們在剛開(kāi)一個(gè)項目以后會(huì )將version定義為1.0-SNAPSHOT。snapshot單詞從字面意思來(lái)說(shuō),是快照、照相的意思。為什么我們新的項目要使用SNAPSHOT呢?而不是我們引入的那些公共包的.RELEASE或者只有版本號什么都不帶呢?這兩個(gè)又有什么區別呢?聽(tīng)我慢慢道來(lái):一個(gè)項目在未上線(xiàn)發(fā)布之前會(huì )在測試環(huán)境或者開(kāi)發(fā)環(huán)境中進(jìn)行測試和調整,也有可能有需求變更和重構。所以,snapshot說(shuō)明了,這個(gè)包還未固化其自身提供的服務(wù)。在使用帶有snapshot的包的時(shí)候要特別小心。他很可能發(fā)生變化,不知道什么時(shí)候你之前使用的功能就會(huì )被這個(gè)包的維護人員干掉或者改變了。而大家使用的類(lèi)似Spring之類(lèi)的公共開(kāi)源包都是以RELEASE結尾的,這說(shuō)明了當前這個(gè)版本號的包會(huì )穩定的提供功能服務(wù),不會(huì )發(fā)生任何變化。如果需要變化只能通過(guò)修改版本號。
當我們的項目達到了當前的目標,在經(jīng)過(guò)檢測后不需要改變。這時(shí)我們就需要將SNAPSHOT版本打包成RELEASE版本。只有這樣,使用這個(gè)包的用戶(hù)才能放心的將這個(gè)版本的包放入自己的項目中使用。并且,不會(huì )擔心這個(gè)功能包提供的功能會(huì )隨時(shí)發(fā)生改變。接下來(lái)我們就學(xué)習如何將在git中管理的功能包從snapshot打包成為release版本
scm是mvn為我們提供的,對版本管理軟件進(jìn)行管理和操作的插件。由于本指南只講解打包過(guò)程,不會(huì )詳細講解本工具的具體概念和使用方式。
<project>
<scm>
<!--release包需要放入的nexus或者其他maven release包的倉庫url地址-->
<url>http://xxxx/nexus/content/repositories/releases/</url>
<!--connection, developerConnection: 都是連接字符串,其中后者是具有write權限的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>
復制代碼
<build>
<plugins>
<!-- 發(fā)布插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<!--git用戶(hù)名-->
<username>xxxxx@shishike.com</username>
<!--git密碼-->
<password>xxxx</password>
<!--mvn目標指令-->
<goals>-f pom.xml deploy</goals>
</configuration>
</plugin>
</plugins>
</build>
復制代碼
這條命令主要是做打包前的準備。
輸入對應的release需要打包的版本等信息,如果不輸入有默認的內容
將需要記錄和準備的內容緩存到pom.xml目錄下的release.properties文件中
在本地和遠程庫的GIT中打上對應版本的tag
在準備過(guò)程中還會(huì )run 單元測試等phase,如果沒(méi)有異常的話(huà)可以繼續最后一步。如果git還沒(méi)有commit或單元測試失敗會(huì )導致prepare失敗,這時(shí)候你就需要到下面一個(gè)命令了。
如果在準備階段發(fā)生錯誤,或者需要修改某些地方的話(huà)。就需要到這個(gè)命令了,這個(gè)命令執行以后會(huì )做以下這些事
刪除線(xiàn)上git庫tag,但是本地庫tag沒(méi)有被刪除,需要手動(dòng)使用git tag -d XXX進(jìn)行刪除。如果不將本地庫中的tag刪除將會(huì )導致prepare失敗。
刪除之前緩存在pom.xml統一目錄下的配置
如果確認無(wú)誤了以后,就可以執行perform命令了。這個(gè)命令干了以下這些事:
驗證代碼合法性
將你之前的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版本了。同時(shí)你會(huì )發(fā)現你的pom.xml文件會(huì )自動(dòng)的變成1.1-SNAPSHOT版本。雖然這一系列操作都可以通過(guò)手動(dòng)完成。但是有這個(gè)工具的存在,免去了很多步驟。也規范了流程,何樂(lè )而不為呢。
聯(lián)系客服