第五章 Maven-構建生命週期、階段、目標
阿新 • • 發佈:2021-08-12
一、概述
專案的構建通常包含數個相互獨立的大塊任務,可以獨立執行,如生成文件,構建jar包等。單個任務的執行過程被稱為一個構建生命週期,構建生命週期由一系列的構建階段組成,每個階段包含一系列的構建目標。
我們可以執行構建階段或構建目標。階段按順序執行,執行一個階段則會先執行該階段之前的所有階段。當執行構建階段時,將會按順序執行其中包含的所有構建目標。構建目標可以被分配到一個或多個構建階段。我們還可以直接執行構建目標。
二、構建生命週期
如前所述,Maven構建遵循特定的生命週期來構建和部署專案。 Maven有3個內建的構建生命週期: # 1.default – 編譯原始碼並處理打包專案相關的所有事情 # 2.clean – 清理構建輸出,包括生成的編譯類、JAR檔案等 # 3.site – 為專案生成文件 每一個構建生命週期都是獨立執行的,可以讓Maven同時執行多個構建生命週期,它們之間彼此獨立,就像獨立執行Maven命令一樣。
三、構建階段
每個構建生命週期包含一系列的構建階段,每個構建階段又包含了一系列的構建目標。 當執行一個構建階段時,該階段之前的所有階段也將被執行。例如,執行install構建階段,首先會執行該階段之前的所有階段,然後執行install階段。 預設生命週期的作用是構建程式碼,是最重要的構建生命週期,它不能直接執行,要通過執行它的構建階段或目標來執行。預設生命週期包含非常多的階段及目標,其中常用的構建階段是: # 1.validate 驗證專案是正確的,所有必要資訊都可用,所有依賴項都已下載。 # 2.compile 編譯專案原始碼。 # 3.test 使用適當的單元測試框架對編譯後的原始碼執行測試。 # 4.package 將編譯後的程式碼打包成可釋出格式,例如JAR。 # 5.install 將包安裝到本地儲存庫中,以便在本地的其他專案中作為依賴項使用。 # 6.deploy 將最終包複製到遠端儲存庫,以便與其他開發人員和專案共享。 通過將階段名稱傳遞給mvn命令,可以執行一個構建階段。 mvn install 這個例子執行專案的install階段,首先會執行它之前的所有構建階段,然後再執行install階段。 如果標準的階段和目標不能滿足專案需要,還可以建立自定義構建外掛來實現額外構建功能。
四、構建目標
每個構建階段都包含一系列構建目標,當執行一個階段時,所有繫結到這個階段的目標都將按順序執行。 構建目標本身屬於一個外掛,外掛是構建目標的集合,也稱為MOJO (Maven Old Java Object)。可以把外掛理解為一個類,構建目標是類中的方法,構建階段是是對這些方法的順序呼叫。 構建目標可以繫結到多個構建階段,也可以不繫結,就像類的方法可以被呼叫,也可以不被呼叫。 可以使用以下命令列出繫結到特定階段的所有目標及其所屬外掛: mvn help:describe -Dcmd=PHASENAME 例如,要列出所有繫結到編譯階段的目標: mvn help:describe -Dcmd=compile 輸出: compile' is a phase corresponding to this plugin: org.apache.maven.plugins:maven-compiler-plugin:3.1:compile 意思是編譯器外掛的編譯目標被繫結到編譯階段。 構建目標可以被直接執行: mvn [plugin-name]:[goal-name] # 示例: mvn dependency:copy-dependencies
五、專案構建常用命令
1.mvn deploy
# 要構建Maven專案,我們需要通過執行其中一個階段來執行某個生命週期:
mvn deploy
2.mvn install
# 這將執行整個預設生命週期。有時,我們只需執行到安裝階段為止:
mvn install
但通常我們會用以下命令:
mvn clean install
在新構建之前,首先通過執行clean生命週期來清理專案。
3.執行特定目標
# 我們也可以只執行某個特定目標:
mvn compiler:compile
ps:如果我們試圖在沒有指定階段或目標的情況下構建Maven專案,將會導致以下錯誤:
[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal