概述
Maven出現(xiàn)以前,項目構(gòu)建的生命周期就已經(jīng)存在了。軟件開發(fā)人員每天都在對項目進行清理鸟辅、編譯、測試及部署莺葫,而且往往使用不同的方式做類似的工作匪凉。Maven生命周期對所有的構(gòu)建過程進行抽象和統(tǒng)一,總結(jié)了一套高度完善、易擴展的生命周期。包含了項目的清理伦泥、初始化、編譯琐簇、測試、打包、集成測試、驗證蛋济、部署、站點生成等幾乎所有的構(gòu)建步驟炮叶。
敲黑板瘫俊,劃重點啦!
Maven生命周期是抽象的悴灵,本身不做任何實際工作,實際任務都交由插件完成骂蓖。這種思想類似于設計模式中的模版方法模式(在父類中定義算法的整體結(jié)構(gòu)积瞒,子類可以通過實現(xiàn)或者重寫父類的方法來控制實際的行為)。
1.三套生命周期
Maven擁有三套相互獨立的生命周期登下,分別是clean(清理項目)茫孔,default(構(gòu)建項目)和site(建立項目站點)叮喳。僅調(diào)用某套生命周期的某階段不會對其他生命周期產(chǎn)生影響。每個生命周期都包含多個有序的階段(phase)缰贝,并且后面的階段依賴于前面的階段馍悟。Maven生命周期文檔鏈接
Clean Lifecycle,目的是清理項目剩晴,包含三個階段:
pre-clean 執(zhí)行清理前需要完成的工作
clean 清理上一次構(gòu)建生成的所有文件
post-clean 完成清理后需要完成的工作Default Lifecycle锣咒,目的是構(gòu)建項目,生命周期中最核心的部分:
validate 驗證項目是否正確及是否提供必要信息赞弥。
initialize 初始化構(gòu)建狀態(tài)毅整,例如設置屬性或創(chuàng)建目錄。
generate-sources 生成所有包含在編譯中的源代碼绽左。
Δ process-sources 處理項目主資源文件悼嫉。對src/main/resources目錄的內(nèi)容進行變量替換等工作后,復制到項目輸出的主classpath目錄中拼窥。
generate-resources 生成包含在包中的資源
process-resources 將資源復制并處理到目標目錄中戏蔑,為打包做準備。
Δ compile 編譯項目的主源碼鲁纠。編譯src/main/resources目錄下的java文件至項目輸出的主classpath目錄中总棵。
process-classes 處理編譯后的class文件。
generate-test-sources 生成所有包含在編譯中的測試代碼房交。
Δ process-test-sources 處理項目測試源文件彻舰。對src/test/resources目錄的內(nèi)容進行變量替換等工作后,復制到項目輸出的測試classpath目錄中候味。
generate-test-resources 創(chuàng)建測試資源刃唤。
process-test-resources 將資源復制并處理到目標目錄中。
Δ test-compile 編譯項目的測試代碼白群。編譯src/test/resources目錄下的java文件至項目輸出的測試classpath目錄中尚胞。
process-test-classes 處理測試代碼編譯后的class文件。
Δ test 使用單元測試框架運行測試帜慢。測試代碼不會被打包或部署笼裳。
prepare-package 打包前要做的準備工作。比如粱玲,解壓縮躬柬,處理版本。
Δ package 接受編譯好的代碼抽减,打包成可發(fā)布的格式允青。
pre-integration-test 在集成測試執(zhí)行之前所需的操作。比如卵沉,設置環(huán)境等颠锉。
integration-test 如果需要法牲,可將程序包處理并部署到可運行集成測試的環(huán)境中。
post-integration-test 完成集成測試后所需的操作琼掠。比如拒垃,清理環(huán)境等。
verify 運行所有檢查來驗證包是否有效及是否符合質(zhì)量標準瓷蛙。
Δ install 將包安裝到Maven本地倉庫悼瓮,供本地其他Maven項目使用
Δ deploy 將最終的包復制到遠程倉庫,供其他開發(fā)人員和Maven項目使用速挑。Site Lifecycle 目的是建立和發(fā)布項目站點谤牡,Maven可以基于POM包含的信息,自動生成一個站點姥宝,方便團隊交流和發(fā)布項目信息翅萤。該生命周期包含以下階段:
pre-site 執(zhí)行一些在生成項目站點之前需要完成的工作
site 生成項目站點文檔
post-site 完成生成項目站點后需要完成的工作
site-deploy 將生成的項目站點發(fā)布到服務器上。
2.命令行
mvn clean
調(diào)用clean生命周期的clean階段腊满。實際執(zhí)行的階段為clean生命周期的pre-clean和clean階段套么。
mvn test
調(diào)用default生命周期的test階段。實際執(zhí)行的階段為default生命周期的validate碳蛋、initialize等胚泌, test及其之前的所有階段。
mvn clean install
調(diào)用clean生命周期的clean階段和default生命周期的install階段肃弟。實際執(zhí)行的階段為clean生命周期的pre-clean和clean階段玷室,default生命周期的install及其之前的所有階段。
mvn clean deploy site-deploy
調(diào)用clean生命周期的clean階段和default生命周期的install階段笤受。實際執(zhí)行的階段為clean生命周期的pre-clean和clean階段穷缤,default生命周期的所有階段,site生命周期的所有階段箩兽。
所有的Maven生命周期定義 我們可以去查看$M2_HOME$\lib\maven-core-3.3.9\META-INF\plexus\下的componenets.xml津肛,例如Default生命周期階段定義:
<component>
<role>org.apache.maven.lifecycle.Lifecycle</role>
<implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
<role-hint>default</role-hint>
<configuration>
<id>default</id>
<phases>
<phase>validate</phase>
<phase>initialize</phase>
<phase>generate-sources</phase>
<phase>process-sources</phase>
<phase>generate-resources</phase>
<phase>process-resources</phase>
<phase>compile</phase>
<phase>process-classes</phase>
<phase>generate-test-sources</phase>
<phase>process-test-sources</phase>
<phase>generate-test-resources</phase>
<phase>process-test-resources</phase>
<phase>test-compile</phase>
<phase>process-test-classes</phase>
<phase>test</phase>
<phase>prepare-package</phase>
<phase>package</phase>
<phase>pre-integration-test</phase>
<phase>integration-test</phase>
<phase>post-integration-test</phase>
<phase>verify</phase>
<phase>install</phase>
<phase>deploy</phase>
</phases>
</configuration>
</component>
接下來進入Maven插件的學習。
——《Maven實戰(zhàn)》學習筆記