Maven 構建生命週期
構建生命週期是什麼?
構建生命週期階段的目標是執行順序是一個良好定義的序列。
這裏使用一個例子,一個典型的 Maven 構建生命週期是由下列順序的階段:
階段
處理
描述
準備資源
資源複製
資源複製可以進行定製
編譯
執行編譯
源代碼編譯在此階段完成
包裝
打包
創建JAR/WAR包如在 pom.xml 中定義提及的包
安裝
安裝
這一階段在本地/遠程Maven倉庫安裝程序包
可用於註冊必須執行一個特定的階段之前或之後的目標,有之前處理和之後階段。
當 Maven 開始建立一個項目,它通過定義序列階段步驟和執行註冊的每個階段的目標。 Maven有以下三種標準的生命週期:
clean
default(或 build)
site
目標代表一個特定的任務,它有助於項目的建設和管理。可以被綁定到零個或多個生成階段。一個沒有綁定到任何構建階段的目標,它的構建生命週期可以直接調用執行。
執行的順序取決於目標和構建階段折調用順序。例如,考慮下面的命令。清理和打包(mvn clean)參數的構建階段,而 dependency:copy-dependencies package 是一個目標。
mvn clean dependency:copy-dependencies package
在這裏,清潔的階段,將首先執行,然後是依賴關係:複製依賴性的目標將被執行,並終於將執行包階段。
清潔生命週期
當我們執行命令 mvn clean 命令後,Maven 調用清潔的生命週期由以下幾個階段組成:
pre-clean
clean
post-clean
Maven 清潔目標(clean:clean)被綁定清潔乾淨的生命週期階段。clean:clean 目標刪除 build 目錄下的構建輸出。因此,當 mvn clean 命令執行時,Maven會刪除編譯目錄。
目標清潔生命週期在上述階段,我們可以自定義此行爲。
在下面的示例中,我們將附加 maven-antrun-plugin:run 對目標進行預清潔,清潔和清潔後這三個階段。這將使我們能夠調用的信息顯示清理生命週期的各個階段。
現在來創建了一個 pom.xml 文件在 C:\MVN\ 項目文件夾中,具體內容如下:
現在,打開命令控制檯,到該文件夾包含 pom.xml 並執行以下 mvn 命令。
C:\MVN\project>mvn post-clean
Maven將開始處理並顯示清理生命週期的所有階段。
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] Executing tasks
[echo] pre-clean phase
[INFO] Executed tasks
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] [antrun:run {execution: id.post-clean}]
[INFO] Executing tasks
[echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------
你可以嘗試調整 mvn 清潔命令,該命令將顯示清潔前什麼都不會被執行。
默認(或生成)生命週期
這是 Maven 主要的生命週期,用於構建應用程序。它有以下 23 個階段。
生命週期階段
描述
validate
驗證項目是否正確,並且所有必要的信息可用於完成構建過程
initialize
建立初始化狀態,例如設置屬性
generate-sources
產生任何的源代碼包含在編譯階段
process-sources
處理源代碼,例如,過濾器值
generate-resources
包含在包中產生的資源
process-resources
複製和處理資源到目標目錄,準備打包階段
compile
編譯該項目的源代碼
process-classes
從編譯生成的文件提交處理,例如:Java類的字節碼增強/優化
generate-test-sources
生成任何測試的源代碼包含在編譯階段
process-test-sources
處理測試源代碼,例如,過濾器任何值
test-compile
編譯測試源代碼到測試目標目錄
process-test-classes
處理測試代碼文件編譯生成的文件
test
運行測試使用合適的單元測試框架(JUnit)
prepare-package
執行必要的任何操作的實際打包之前準備一個包
package
提取編譯後的代碼,並在其分發格式打包,如JAR,WAR或EAR文件
pre-integration-test
完成執行集成測試之前所需操作。例如,設置所需的環境
integration-test
處理並在必要時部署軟件包到集成測試可以運行的環境
pre-integration-test
完成集成測試已全部執行後所需操作。例如,清理環境
verify
運行任何檢查,驗證包是有效的,符合質量審覈規定
install
將包安裝到本地存儲庫,它可以用作當地其他項目的依賴
deploy
複製最終的包到遠程倉庫與其他開發者和項目共享
有涉及到Maven 生命週期值得一提幾個重要概念:
當一個階段是通過 Maven命令調用,例如:mvn compile,只有階段到達幷包括這個階段纔會被執行。
不同的 Maven 目標綁定到 Maven生命週期的不同階段這是這取決於包類型(JAR/WAR/EAR)。
在下面的示例中,將附加 Maven 的 antrun 插件:運行目標構建生命週期的幾個階段。這將使我們能夠回顯的信息顯示生命週期的各個階段。
我們已經更新了在 C:\MVN\ 項目文件夾中的 pom.xml 文件。
現在,打開命令控制檯,進入包含 pom.xml 並執行以下 mvn 命令。
C:\MVN\project>mvn compile
編譯階段,Maven 將開始構建生命週期的階段處理並顯示。
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [compile]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.validate}]
[INFO] Executing tasks
[echo] validate phase
[INFO] Executed tasks
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\project\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [antrun:run {execution: id.compile}]
[INFO] Executing tasks
[echo] compile phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
[INFO] Final Memory: 7M/64M
[INFO] ------------------------------------------------------------------
網站的生命週期
Maven的網站插件通常用於創建新的文檔,創建報告,部署網站等。
階段
pre-site
site
post-site
site-deploy
在下面的示例中,我們將附加 maven-antrun-plugin:run 目標網站的生命週期的所有階段。這將使我們能夠調用短信顯示的生命週期的各個階段。
現在更新 pom.xml 文件在 C:\MVN\ 項目文件夾中。
打開命令控制檯,進入該文件夾包含 pom.xml 並執行以下 mvn 命令。
C:\MVN\project>mvn site
Maven將開始處理並顯示網站的生命週期階段的各個階段。
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] Executing tasks
[echo] pre-site phase
[INFO] Executed tasks
[INFO] [site:site {execution: default-site}]
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Project Plugins" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO] [antrun:run {execution: id.site}]
[INFO] Executing tasks
[echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
[INFO] Final Memory: 24M/149M
[INFO] -