純乾貨!華為軟體開發雲編譯構建之Maven
一.Maven介紹
Maven是一個專案管理和整合的工具。Maven為開發者提供了一套完整的構建生命週期框架。開發團隊基本不用花多少時間就能自動完成工程的基礎構建配置,因為Maven使用了一個標準的目錄結構和一個預設的構建生命週期。
二.Maven用途
Maven提供了幫助管理
構建、文件、報告、依賴、SCMs、釋出、分發的方法。可以方便的編譯程式碼、進行依賴管理、管理二進位制庫等等。Maven的好處在於可以將專案過程規範化、自動化、高效化以及強大的可擴充套件性利用Maven自身及其外掛還可以獲得程式碼檢查報告、單元測試覆蓋率、實現持續整合等等。
三.Maven配置
1. 新建構建任務
首先在
圖1 新建構建任務
【maven-demo】是使用者自定義的構建任務名稱。
【maven_demo】是已經建立的程式碼倉庫,【master】是【maven_demo】中的一個分支。
關於歸檔,需要注意兩點:
1)
歸檔的路徑,預設是【target/*.jar】,實際路徑取決於pom檔案的路徑,我們先看【maven_demo】的工程目錄(見圖2),pom檔案在【springmvc_demo】資料夾內,所以實際歸檔的路徑應該是【springmvc_demo/target/*.jar】。
圖2 maven_demo倉庫目錄結構
2) 歸檔型別,預設是jar,實際型別取決於pom檔案中的設定(見圖3),pom檔案中,打包型別是war,所以實際型別是war。
圖3 springmvc_demo工程pom檔案
所以,歸檔中,應該寫入【springmvc_demo/target/*.war】。
最後,成功建立構建任務。
2. 編輯構建任務
1) 基本資訊
建立任務時的配置是最基本的配置,使用者可以通過編輯任務配置更詳細的引數(見圖4)。
圖4 構建任務編輯步驟
在【基本資訊】中,可以設定【執行引數配置】,也就是在執行構建的時候,進行引數配置。這些引數主要用於設定【包名】、【版本號】、【分組】和【打包型別】,在【配置構建】中會使用這些引數(見圖5)。
圖5 執行引數配置
【字元型別】就是字串,【自定義型別】類似於列舉,從定義好的值中選擇一個(見圖6,圖7)。
圖6自定義型別引數編輯
圖7 自定義型別引數值
2) 程式碼配置
選擇要構建的程式碼倉庫和分支(見圖8)。
圖8 選擇一個程式碼倉庫
如果選擇【自動構建】,則只要倉庫程式碼有變動,就會觸發編譯構建。
根據專案需要,如果要構建多個倉庫,為了避免程式碼衝突,需要指定儲存目錄(見圖9)。
圖9 選擇多個程式碼倉庫
該儲存目錄由使用者自定義設定,在伺服器中對應的路徑與倉庫的目錄結構有關。
【maven_demo】的構建路徑如下圖:
圖10 maven_deno倉庫的工作目錄
【maven_demo2】的構建路徑如下圖:
圖11 maven_deno2倉庫的工作目錄
注意:倉庫【maven_demo2】的目錄結構與倉庫【maven_demo】的不同,前者的pom檔案在倉庫的根目錄下,後者的pom檔案在根目錄下的【springmvc_demo】目錄中。
3) 構建配置
構建環境選擇【Java】,構建型別選擇【Maven】。Maven的配置引數很多(見圖12)。
圖12 maven引數配置
【Maven版本】:目前只支援mvn3.3.1,之後會根據maven的版本升級而更新可選擇的版本號。
【釋出到私有庫】:預設不選是執行maven
package,打包到本專案,一般是在專案target目錄下。如果勾選,則執行maven
deploy,打包上傳到遠端倉庫,將軟體包釋出至使用者私有maven release和maven snapshot倉庫,需要配置pom檔案。
【Maven引數】:預設是-U,在編譯的時候會下載snapshot倉庫的最新依賴包。如果有需要可以配置其他的引數(見圖13)。
圖13 maven常用引數命令
【POM檔案】:如果pom檔案在倉庫的根目錄下,則不用填寫,如果像倉庫【maven_demo】,pom檔案不在根目錄下,需要指定pom檔案的路徑【springmvc_demo/pom.xml】,如果在【程式碼配置】中,指定了【儲存目錄】為test1,則需要要加上儲存目錄,即【test1/springmvc_demo/pom.xml】。
【屬性】:即構建指令碼需要的屬性。用命令列使用Maven的外掛時,-D表示屬性的輸入。例如maven的版本管理,增加屬性如下(見圖14):
#Maven 版本管理
branchName=xxxx-100317 #分支中的名稱
updateBranchVersions=false #是否更新分支的版本資訊,預設為false
updateWorkingCopyVersions=false #是否更新主幹的版本資訊,預設為true
每個屬性中不能有空格,屬性之間用空格分開。
圖14 maven屬性配置
具體如何查詢屬性請參考下面連結:
【JVM選項】: 在基於Maven管理的Java專案中,經常出現記憶體溢位的錯誤,這種情況下,需要進行JVM的引數設定更新,一般而言,都是根據記憶體溢位問題的不同,針對記憶體、permspace來進行調整和設定。比如增大PermGen區空間為128M,設定方法為
set
MAVEN_OPTS=-XX:MaxPermSize=128M,實際填寫【JVM選項】時,只寫入【-XX:MaxPermSize=128M】(見圖15),如果需要設定多個屬性,屬性之間用空格分隔。
圖15 maven JVM選項配置
JVM的具體引數請參考下面的連結:
【編譯構建後】選擇【釋出到編譯構建倉庫】(見圖16)
圖16 編譯構建後引數配置
這裡,會定義【包名】、【版本號】、【檔案路徑】、【分組】和【打包型別】,這裡可以寫入固定的值,也可以使用在【基本資訊】中定義的引數,這裡使用的就是【基本資訊】中定義的引數。方法是${引數名}。關於【檔案路徑】,如果pom檔案在倉庫的根目錄下,並且沒有指定【儲存目錄】,則【檔案路徑】為【target/springmvc_demo.war】,如果指定了【儲存目錄】為test1,那麼在【檔案路徑】最前面應該加上儲存目錄,例如【test1/springmvc_demo/target/springmvc_demo.war】。
如果同時構建多個倉庫,則需要再增加【執行Maven】和【釋出到編譯構建倉庫】步驟(見圖17)。
圖17 多倉庫編譯構建後引數配置
4) 構建執行配置
【構建結果】選擇【歸檔】,【用於歸檔的檔案】預設就是全部包(見圖18)。具體路徑也是取決於pom檔案的路徑,參考【構建配置】中的【檔案路徑】。
圖18 構建結果配置
包的型別取決於pom檔案中的定義。【不包含】是指不需要歸檔的包,如果有多個,每個包之間用空格分隔。
如果選擇多個程式碼倉庫,則需要增加【歸檔】(見圖19)。
圖19 多倉庫構建結果配置
5) 構建計劃配置
【構建計劃】有【不定時】、【每日】和【每週】。
【不定時】是指使用者手動構建,使用者不操作,就不會構建。
【每日】是指每天定時構建,不需要使用者操作(見圖20)。
圖20 每日構建計劃配置
【每週】是指每週可以固定哪幾天定時構建,如週二,週四(見圖21),也不需要使用者操作。
圖21 每週構建計劃配置
【構建時長限制】是指一次構建最長時間限制,如果超過該時長還沒有構建完畢,則停止構建。
四.Maven構建
使用者執行【開始構建】,會彈出引數視窗(見圖22)。
圖22 執行構建配置
根據專案實際需求,填寫引數,這些引數是在【基本資訊】中定義好的,然後開始【執行】,最後構建成功(見圖23)。
圖23 構建成功
五.小結
maven不僅是構建工具,它還是依賴管理工具和專案管理工具,提供了中央倉庫,能夠幫我們自動下載構件。為了解決依賴的增多,版本不一致,版本衝突,依賴臃腫等問題,它通過一個座標系統來精確地定位每一個構件。maven還為全世界的Java開發者提供了一個免費的中央倉庫,在其中幾乎可以找到任何的流行開源軟體。通過衍生工具(nexus),我們還能對其進行快速搜尋。總之,maven構建會給你帶來很多的好處和驚喜。