Maven 生命週期
阿新 • • 發佈:2019-12-31
Maven 生命週期
Maven 生命週期是為了對所有的構建過程進行抽象和統一,開發了一套高度完善的、易擴充套件的生命週期。這個生命週期包含了專案的清理、初始化、編譯、測試、打包、整合測試、驗證、部署和站點生成等幾乎所有構建步驟。
Maven 生命週期本身不做任何實際的工作,實際的任務都交給外掛來完成。這樣的設計,既保證了 Maven 整體框架的輕便,也最大程度的擴充套件性。
Maven 生命週期抽象了構建的各個步驟,明確了它們的邏輯次序,但沒有提供具體的實現,通過外掛來完成實際的工作,每個構建步驟都可以繫結一個或者多個外掛行為。為了讓 Maven 開箱即用,Maven 為大多數構建步驟編寫並綁定了預設外掛。比如針對編譯的外掛有 maven-compiler-plugin
maven-surefire-plugin
等。
生命週期步驟
在 Maven 中,有三套相互獨立的生命週期,分別是 clean
、default
和 site
。
-
clean
:clean 生命週期的目的是清理專案; -
default
:default 生命週期的目的是構建專案; -
site
:site 生命週期的目的是建立專案站點;
**每個生命週期包含一些階段(phase),這些階段是有順序的,並且後面的階段依賴於前面的階段。**以 clean
生命週期為例,它包含的階段有 pre-clean
、clean
和 post-clean
:
- 當我們呼叫
pre-clean
的時候,只有pre-clean
- 當我們呼叫
clean
的時候,pre-clean
和clean
階段會按順序執行; - 當我們呼叫
post-clean
的時候,pre-clean
、clean
和post-clean
都會按順序執行;
和生命週期階段的前後依賴關係相比,clean
、default
和 site
這三套生命週期本身是相互獨立的,我們可以僅僅呼叫 clean
生命週期的某個階段,或者僅僅呼叫 default
生命週期的某個階段,而不會對其它生命週期產生任何影響。
clean 生命週期
階段 | 執行清理前需要完成的工作 |
---|---|
pre-clean | 執行清理前需要完成的工作 |
clean | 清理構建生成的檔案 |
post-clean | 執行清理後需要完成的工作 |
default 生命週期
階段 | 執行清理前需要完成的工作 |
---|---|
validate | - |
initialize | - |
generate-sources | - |
process-sources | - |
generate-resources | - |
process-resources | 處理專案主資源('src/main/resources')檔案,如進行變數替換等工作 |
compile | 編譯專案的原始碼 |
process-classes | - |
generate-test-sources | - |
process-test-sources | 處理專案測試資源('src/test/resources')檔案 |
generate-test-resources | - |
process-test-resources | - |
test-compile | 編譯專案測試程式碼 |
process-test-classes | - |
test | 使用單元測試框架執行測試,測試程式碼不會被打包或部署 |
prepare-package | - |
package | 打包編譯好的程式碼 |
pre-integration-test | - |
integration-test | - |
post-integration-test | - |
verify | 包校驗操作 |
install | 安裝包到Maven本地倉庫 |
deploy | 將包部署到遠端倉庫 |
site 生命週期
階段 | 執行清理前需要完成的工作 |
---|---|
pre-site | 在生成專案站點前執行一些工作 |
site | 生成專案站點檔案 |
post-site | 在生成專案站點後執行一些工作 |
site-deploy | 將生成專案站點發布到伺服器上 |
常用命令詳解
我們通過 Maven 命令列來編譯、測試和打包程式的命令,而這些命令其實就是完成了生命週期的操作。
-
mvn clean:呼叫外掛完成
clean
生命週期的clean
階段的操作,實際呼叫的是pre-clean
和clean
兩個階段; -
mvn test:呼叫
default
生命週期對應的階段的外掛,完成從validate
到test
階段的所有操作; -
mvn clean install:呼叫
clean
週期的clean
階段和default
的install
階段,實際呼叫的是pre-clean
、clean
以及validate
到install
階段; -
mvn clean deploy site-deploy:呼叫完整的三個生命週期所有階段(
post-clean
不被呼叫);