咱們在開發項目的時候,不斷地在編譯、測試、打包、部署等過程,maven的生命週期就是對全部構建過程抽象與統一,生命週期包含項目的清理、初始化、編譯、測試、打包、集成測試、驗證、部署、站點生成等幾乎全部的過程。服務器
Maven有三套相互獨立的生命週期,請注意這裏說的是「三套」,並且「相互獨立」,初學者容易將Maven的生命週期當作一個總體,其實否則。這三套生命週期分別是:併發
• CleanLifecycle 在進行真正的構建以前進行一些清理工做。框架
• DefaultLifecycle 構建的核心部分,編譯,測試,打包,部署等等。maven
• SiteLifecycle 生成項目報告,站點,發佈站點。post
再次強調一下它們是相互獨立的,能夠僅僅調用clean來清理工做目錄,僅僅調用site來生成站點。固然也能夠直接運行 「mvn clean install site」 運行全部這三套生命週期。單元測試
每套生命週期都由一組階段(Phase)組成,咱們平時在命令行輸入的命令總會對應於一個特定的階段。maven中全部的執行動做(goal)都須要指明本身在這個過程當中的執行位置,而後maven執行的時候,就依照過程的發展依次調用這些goal進行各類處理。這個也是maven的一個基本調度機制。測試
每套生命週期還能夠細分紅多個階段。spa
Clean生命週期
Clean生命週期一共包含了三個階段:命令行
Clean生命週期code
pre-clean
執行一些須要在clean以前完成的工做
clean
移除全部上一次構建生成的文件
post-clean
執行一些須要在clean以後馬上完成的工做
命令「mvn clean」中的就是表明執行上面的clean階段,在一個生命週期中,運行某個階段的時候,它以前的全部階段都會被運行,也就是說,「mvn clean」 等同於 「mvn pre-clean clean」 ,若是咱們運行「mvn post-clean」 ,那麼 「pre-clean」,「clean」 都會被運行。這是Maven很重要的一個規則,能夠大大簡化命令行的輸入。
Default生命週期
Maven最重要就是的Default生命週期,也稱構建生命週期,絕大部分工做都發生在這個生命週期中,每一個階段的名稱與功能以下::
Default生命週期
validate
驗證項目是否正確,以及全部爲了完整構建必要的信息是否可用
generate-sources
生成全部須要包含在編譯過程當中的源代碼
process-sources
處理源代碼,好比過濾一些值
generate-resources
生成全部須要包含在打包過程當中的資源文件
process-resources
複製並處理資源文件至目標目錄,準備打包
compile
編譯項目的源代碼
process-classes
後處理編譯生成的文件,例如對Java類進行字節碼加強(bytecode enhancement)
generate-test-sources
生成全部包含在測試編譯過程當中的測試源碼
process-test-sources
處理測試源碼,好比過濾一些值
generate-test-resources
生成測試須要的資源文件
process-test-resources
複製並處理測試資源文件至測試目標目錄
test-compile
編譯測試源碼至測試目標目錄
test
使用合適的單元測試框架運行測試。這些測試應
該不須要代碼被打包或發佈
prepare-package
在真正的打包以前,執行一些準備打包必要的操
做
package
將編譯好的代碼打包成可分發的格式,如
JAR,WAR,或者EAR
pre-integration-test
執行一些在集成測試運行以前須要的動做。如建
立集成測試須要的環境
integration-test
若是有必要的話,處理包併發布至集成測試能夠
運行的環境
post-integration-test
執行一些在集成測試運行以後須要的動做。如清
理集成測試環境。
verify
執行全部檢查,驗證包是有效的,符合質量規範
install
安裝包至本地倉庫,以備本地的其它項目做爲依
賴使用
deploy
複製最終的包至遠程倉庫,共享給其它開發人員
和項目(一般和一次正式的發佈相關)
可見,構建生命週期被細分紅了22個階段,可是咱們不必對每一個階段都瞭如指掌,常常關聯使用的只有process-test-resources、test、package、install、deploy等幾個階段而已。
通常來講,位置稍後的過程都會依賴於以前的過程。這也就是爲何咱們運行「mvn install」 的時候,代碼會被編譯,測試,打包。固然,maven一樣提供了配置文件,能夠依照用戶要求,跳過某些階段。好比有時候但願跳過測試階段而直接install,由於單元測試若是有任何一條沒經過,maven就會終止後續的工做。
Site生命週期
Site生命週期
pre-site
執行一些須要在生成站點文檔以前完成的工做
site
生成項目的站點文檔
post-site
執行一些須要在生成站點文檔以後完成的工做,而且爲部署作準備
site-deploy
將生成的站點文檔部署到特定的服務器上
這裏常常用到的是site階段和site-deploy階段,用以生成和發佈Maven站點,這是Maven至關強大的功能。