Maven實戰讀書筆記(14)

什麼是版本管理?git

版本管理是指項目總體版本的演變過程管理,如從1.0-SNAPSHOT1.0再到1.1-SNAPSHOTapache

 

什麼是版本控制?瀏覽器

版本控制是指藉助版本控制工具(如Subversion)追蹤代碼的每個變動安全

 

何時能夠將快照版本更新爲發佈版本架構

1、全部自動化測試應當所有經過併發

2、項目沒有配置任何快照版本的依賴app

3、項目沒有配置任何快照版本的插件maven

4、項目所包含的代碼已經所有提交到版本控制系統中svn

 

Maven的版本號定義約束工具

可能有個版本號是這樣的,1.3.4-beta-2

Maven的版本號定義約定是這樣的,<主版本>.<次版本>.<增量版本>-<里程碑版本>

1、主版本:表示項目的重大架構變動

2、次版本:表示較大範圍的功能增長和變化

3、增量版本:通常表示重大Bug的修復

4、里程碑版本:顧名思義,這每每指某一個版本的里程碑。例如,Maven 3已經發布了不少里程碑版本,如3.0-alpha-13.0-alpha-23.0-beta-1等,這樣的版本與正式的3.0相比,每每表示不是很是穩定,還須要不少測試

 

關於版本號須要注意的地方

1、不是每一個版本號都必須擁有這四個部分,通常來講,主版本和次版本都會聲明,但增量版本和里程碑就不必定了

2、當用戶在聲明依賴或插件未聲明版本時,Maven就會根據上述版本號約定自動解析最新版本。這個時候就須要對版本號進行排序,對於主版本、次版本和增量版原本說,比較是基於數字的,所以1.5>1.4>1.3.11>1.3.9。而對於里程碑版本,Maven則只進行簡單的字符串比較,所以會獲得1.2-beta-3>1.2-beta-11的結果

 

理解主幹、標籤與分支

1、主幹:項目開發代碼的主體,是從項目開始直到當前都處於活動的狀態。從這裏能夠得到項目最新的源代碼以及幾乎全部的變動歷史

2、分支:從主幹的某個點分離出來的代碼拷貝,一般能夠在不影響主幹的前提下在這裏進行重大Bug的修復,或者作一些實驗性質的開發。若是分支達到了預期的目的,一般發生在這裏的變動會被合併(merge)到主幹中

3、標籤:用來標識主幹或者分支的某個點的狀態,以表明項目的某個穩定狀態,這一般就是版本發佈時的狀態

 

使用Maven管理項目版本,可能有這樣的場景

項目最初的版本是1.0.0-SNAPSHOT,通過一段時間的開發後,1.0.0版本發佈,這個時候就須要打一個標籤,圖中用一個長條表示。而後項目進入1.1.0-SNAPSHOT狀態,大量的開發工做都完成在主幹中,添加了一些新特性並修復了不少Bug以後。項目1.1.0發佈,一樣,這時候須要打另外一個標籤。發佈事後,項目進入1.2.0-SNAPSHOT階段,可這個時候用戶報告1.1.0版本有一個重大的Bug,須要儘快修復,咱們不能在主幹中修Bug,由於主幹有太多的變化,沒法在短期內測試完畢併發布,咱們也不能中止1.2.0-SNAPSHOT的開發,所以這時候能夠基於1.1.0建立一個1.1.1-SNAPSHOT的分支,在這裏進行Bug修復,而後爲用戶發佈一個1.1.1增量版本,同時打上標籤。固然,還不能忘了把Bug修復涉及的變動合併到1.2.0-SNAPSHOT的額主幹中,主幹在開發一段時間以後,發佈1.2.0版本,而後進入到新版本1.3.0-SNAPSHOT的開發過程當中

 

使用Maven Release Plugin插件,流程化管理版本發佈

Maven Release Plugin主要有三個目標,它們分別爲:

n         releaseprepare,準備版本發佈

n         releaserollback,回退releaseprepare所執行的操做

n         releaseperform,執行版本發佈

 

releaseperpare目標都作了哪些操做?

n         檢查項目是否有未提交的代碼

n         檢查項目是否有快照版本依賴

n         根據用戶的輸入將快照版本升級爲發佈版

n         POM中的SCM信息更新爲標籤地址

n         基於修改後的POM執行Maven構建

n         提交POM變動

n         基於用戶輸入爲代碼打標籤

n         對代碼從發佈版升級爲新的快照版

n         提交POM變動

 

releaserollback目標都作了哪些操做?

POM回退至releaseprepare以前的狀態,並提交。須要注意的是,該步驟不會刪除releaseprepare生成的標籤,所以用戶須要手動刪除

 

releaseperform目標都作了哪些操做?

簽出releaseprepare生成的標籤中的源代碼,並在此基礎上執行mvn deploy命令打包並部署構件至倉庫

 

另外,使用Maven Release Plugin插件須要注意

1、要爲項目發佈版本,首先須要爲其添加正確的版本控制系統信息

2、這是由於Maven Release Plugin須要知道版本控制系統的主幹、標籤等地址信息後才能執行相關的操做

 

通常的SCM,版本發佈配置SCM信息以下

<project>

...

       <scm>

              <connection>scm:svn:http://10.1.0.56/app/trunk</connection>

              <developerConnection>scm:svn:http://10.1.0.56/app/trunk</developerConnection>

              <url>http://10.1.0.56/account/trunk</url>

       </scm>
...

</project>

對上面配置進行說明

1connection元素表示一個只讀的scm地址

2developerConnection元素表示可寫的scm地址

3url表示能夠在瀏覽器中訪問的scm地址

4、爲了讓Maven識別,connectiondeveloperConnection必須以scm開頭,冒號以後的部分表示版本控制工具類型(這裏是svn),Maven還支持cvsgit

5、接下來纔是實際的scm

地址,該配置中的connection使用了http協議,而developerConnection則因爲涉及寫操做,使用https協議進行了保護

 

上面的配置只告訴Maven當前代碼的位置(主幹),而版本發佈還要涉及標籤等操做,所以,還須要配置Maven Release Plugin告訴其標籤的基礎目錄

 

配置maven-release-plugin提供標籤基礎目錄

<plugin>

       <groupId>org.apache.maven.plugins</groupId>

       <artifactId>maven-release-plugin</artifactId>

       <version>2.0</version>

       <configuration>

              <tagBase>http://10.1.0.56/app/tags/</tagBase>

       </configuration>

</plugin>

 

在執行releaseprepare以前還有兩個注意點

1、系統必需要提供svn命令行工具,Maven須要svn命令行工具執行相關操做,而沒法使用圖形化工具,如TortoiseSVN

2POM必須配置了可用的部署倉庫,由於releaseperform會執行deploy操做將構件發佈到倉庫中

 

maven-release-plugin提供autoVersionSubmodules參數

使用這個參數,maven-release-plugin會自動爲全部子模塊使用與父模塊一致的發佈版本和新的SNAPSHOT版本:

mvn release:prepare -DautoVersionSubmodules=true

 

若是使用release:prepare命令執行的結果沒有問題,就執行mvn release:perform命令

這部分會出現不少問題!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

執行release:performrelease:branch命令之後再試

 

如何保障構件的安全性

當從中央倉庫下載第三方構件的時候,你可能會想要驗證這些文件的合法性,例如它們是由開源項目官方發佈的,而且沒有被篡改過,一樣地,當發佈本身項目給客戶使用的時候,你的客戶也會想要驗證這些文件是不是由你的項目組發佈的,且沒有被惡意篡改過PGP (Pretty Good Privacy)就是這樣一個用來幫助提升安全性的技術。PGP最經常使用來給電子郵件進行加密、解密以及提供簽名,以提升點子郵件交流的安全性

 

基於PGP標準的GPG

GnuPG (簡稱GPG,來自http://www.gnupg.org/ PGP標準的一個免費實現,不管是類UNIX平臺仍是Windows平臺,均可以使用它。GPG可以幫助咱們爲文件生成簽名、管理密鑰以及驗證簽名等

 

具體如何使用GnuPG之後用到再說吧

相關文章
相關標籤/搜索