Maven 生命週期

Maven 生命週期

Maven 生命週期是爲了對全部的構建過程進行抽象和統一,開發了一套高度完善的、易擴展的生命週期。這個生命週期包含了項目的清理、初始化、編譯、測試、打包、集成測試、驗證、部署和站點生成等幾乎全部構建步驟。服務器

Maven 生命週期自己不作任何實際的工做,實際的任務都交給插件來完成。這樣的設計,既保證了 Maven 總體框架的輕便,也最大程度的擴展性。框架

Maven 生命週期抽象了構建的各個步驟,明確了它們的邏輯次序,但沒有提供具體的實現,經過插件來完成實際的工做,每一個構建步驟均可以綁定一個或者多個插件行爲。爲了讓 Maven 開箱即用,Maven 爲大多數構建步驟編寫並綁定了默認插件。好比針對編譯的插件有 maven-compiler-plugin,針對測試的插件有 maven-surefire-plugin 等。maven

生命週期步驟

在 Maven 中,有三套相互獨立的生命週期,分別是 cleandefaultsitepost

  • clean:clean 生命週期的目的是清理項目;
  • default:default 生命週期的目的是構建項目;
  • site:site 生命週期的目的是創建項目站點;

**每一個生命週期包含一些階段(phase),這些階段是有順序的,而且後面的階段依賴於前面的階段。**以 clean 生命週期爲例,它包含的階段有 pre-cleancleanpost-clean單元測試

  • 當咱們調用 pre-clean 的時候,只有 pre-clean 階段執行;
  • 當咱們調用clean 的時候,pre-cleanclean階段會按順序執行;
  • 當咱們調用 post-clean 的時候,pre-cleancleanpost-clean 都會按順序執行;

和生命週期階段的先後依賴關係相比,cleandefaultsite 這三套生命週期自己是相互獨立的,咱們能夠僅僅調用 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-cleanclean 兩個階段;
  • mvn test:調用 default 生命週期對應的階段的插件,完成從 validatetest 階段的全部操做;
  • mvn clean install:調用 clean 週期的 clean 階段和 defaultinstall 階段,實際調用的是 pre-cleanclean 以及 validateinstall 階段;
  • mvn clean deploy site-deploy:調用完整的三個生命週期全部階段(post-clean 不被調用);
相關文章
相關標籤/搜索