Maven 構建生命週期定義了一個項目構建跟發佈的過程。咱們在開發項目的時候,不斷地在編譯、測試、打包、部署等過程,maven的生命週期就是對全部構建過程抽象與統一,生命週期包含項目的清理、初始化、編譯、測試、打包、集成測試、驗證、部署、站點生成等幾乎全部的過程。bash
一個插件目標表明一個特定的任務(比構建階段更爲精細),這有助於項目的構建和管理。這些目標可能被綁定到多個階段或者無綁定。不綁定到任何構建階段的目標能夠在構建生命週期以外經過直接調用執行。這些目標的執行順序取決於調用目標和構建階段的順序。服務器
例以下面的命令:框架
clean
和 pakage
是構建階段,dependency:copy-dependencies
是目標maven
mvn clean dependency:copy-dependencies package
複製代碼
這裏的 clean
階段將會被首先執行,而後 dependency:copy-dependencies
目標會被執行,最終 package
階段被執行。post
mvn clean
中的 clean
就是上面的 clean
,在一個生命週期中,運行某個階段的時候,它以前的全部階段都會被運行,也就是說,mvn clean
等同於mvn pre-clean clean
,若是咱們運行mvn post-clean
,那麼 pre-clean
,clean
都會被運行。單元測試
生命週期階段 | 描述 |
---|---|
validate | 檢查工程配置是否正確,完成構建過程的全部必要信息是否可以獲取到。 |
initialize | 初始化構建狀態,例如設置屬性。 |
generate-sources | 生成編譯階段須要包含的任何源碼文件。 |
process-sources | 處理源代碼,例如,過濾任何值(filter any value)。 |
generate-resources | 生成工程包中須要包含的資源文件。 |
process-resources | 拷貝和處理資源文件到目的目錄中,爲打包階段作準備。 |
compile | 編譯工程源碼。 |
process-classes | 處理編譯生成的文件,例如 Java Class 字節碼的增強和優化。 |
generate-test-sources | 生成編譯階段須要包含的任何測試源代碼。 |
process-test-sources | 處理測試源代碼,例如,過濾任何值(filter any values)。 |
test-compile | 編譯測試源代碼到測試目的目錄。 |
process-test-classes | 處理測試代碼文件編譯後生成的文件。 |
test | 使用適當的單元測試框架(例如JUnit)運行測試。 |
prepare-package | 在真正打包以前,爲準備打包執行任何須要的操做。 |
package | 獲取編譯後的代碼,並按照可發佈的格式進行打包,例如 JAR、WAR 或者 EAR 文件。 |
pre-integration-test | 在集成測試執行以前,執行所需的操做。例如,設置所需的環境變量。 |
integration-test | 處理和部署必須的工程包到集成測試可以運行的環境中。 |
post-integration-test | 在集成測試被執行後執行必要的操做。例如,清理環境。 |
verify | 運行檢查操做來驗證工程包是有效的,並知足質量要求。 |
install | 安裝工程包到本地倉庫中,該倉庫能夠做爲本地其餘工程的依賴。 |
deploy | 拷貝最終的工程包到遠程倉庫中,以共享給其餘開發人員和工程。 |
有一些與 Maven 生命週期相關的重要概念須要說明: 當一個階段經過 Maven 命令調用時,例如
mvn compile
,只有該階段以前以及包括該階段在內的全部階段會被執行。 不一樣的 maven 目標將根據打包的類型(JAR / WAR / EAR
),被綁定到不一樣的 Maven 生命週期階段。測試
生命週期階段 | 描述 |
---|---|
pre-site | 執行一些須要在生成站點文檔以前完成的工做 |
site | 生成項目的站點文檔 |
post-site | 執行一些須要在生成站點文檔以後完成的工做,而且爲部署作準備 |
site-deploy | 將生成的站點文檔部署到特定的服務器上 |
這裏常常用到的是site階段和site-deploy階段,用以生成和發佈Maven站點,這但是Maven至關強大的功能。優化