Maven之(二)Maven生命周期
我們?cè)陂_發(fā)項(xiàng)目的時(shí)候,不斷地在編譯、測(cè)試、打包、部署等過程,maven的生命周期就是對(duì)所有構(gòu)建過程抽象與統(tǒng)一,生命周期包含項(xiàng)目的清理、初始化、編譯、測(cè)試、打包、集成測(cè)試、驗(yàn)證、部署、站點(diǎn)生成等幾乎所有的過程。
Maven有三套相互獨(dú)立的生命周期,請(qǐng)注意這里說的是“三套”,而且“相互獨(dú)立”,初學(xué)者容易將Maven的生命周期看成一個(gè)整體,其實(shí)不然。這三套生命周期分別是:
?????CleanLifecycle?在進(jìn)行真正的構(gòu)建之前進(jìn)行一些清理工作。
?????DefaultLifecycle?構(gòu)建的核心部分,編譯,測(cè)試,打包,部署等等。
?????SiteLifecycle?生成項(xiàng)目報(bào)告,站點(diǎn),發(fā)布站點(diǎn)。
?
再次強(qiáng)調(diào)一下它們是相互獨(dú)立的,可以僅僅調(diào)用clean來清理工作目錄,僅僅調(diào)用site來生成站點(diǎn)。當(dāng)然也可以直接運(yùn)行 “mvn clean install site” 運(yùn)行所有這三套生命周期。
?
每套生命周期都由一組階段(Phase)組成,我們平時(shí)在命令行輸入的命令總會(huì)對(duì)應(yīng)于一個(gè)特定的階段。maven中所有的執(zhí)行動(dòng)作(goal)都需要指明自己在這個(gè)過程中的執(zhí)行位置,然后maven執(zhí)行的時(shí)候,就依照過程的發(fā)展依次調(diào)用這些goal進(jìn)行各種處理。這個(gè)也是maven的一個(gè)基本調(diào)度機(jī)制。
?
每套生命周期還可以細(xì)分成多個(gè)階段。
?
?
Clean生命周期
?
?
Clean生命周期一共包含了三個(gè)階段:
?
| Clean生命周期 | |
| pre-clean | 執(zhí)行一些需要在clean之前完成的工作 |
| clean | 移除所有上一次構(gòu)建生成的文件 |
| post-clean | 執(zhí)行一些需要在clean之后立刻完成的工作 |
?
?
命令“mvn clean”中的就是代表執(zhí)行上面的clean階段,在一個(gè)生命周期中,運(yùn)行某個(gè)階段的時(shí)候,它之前的所有階段都會(huì)被運(yùn)行,也就是說,“mvn clean” 等同于 “mvn pre-clean clean” ,如果我們運(yùn)行“mvn post-clean” ,那么 “pre-clean”,“clean” 都會(huì)被運(yùn)行。這是Maven很重要的一個(gè)規(guī)則,可以大大簡(jiǎn)化命令行的輸入。
?
Default生命周期
?
?
Maven最重要就是的Default生命周期,也稱構(gòu)建生命周期,絕大部分工作都發(fā)生在這個(gè)生命周期中,每個(gè)階段的名稱與功能如下::
?
| Default生命周期 | |
| validate | 驗(yàn)證項(xiàng)目是否正確,以及所有為了完整構(gòu)建必要的信息是否可用 |
| generate-sources | 生成所有需要包含在編譯過程中的源代碼 |
| process-sources | 處理源代碼,比如過濾一些值 |
| generate-resources | 生成所有需要包含在打包過程中的資源文件 |
| process-resources | 復(fù)制并處理資源文件至目標(biāo)目錄,準(zhǔn)備打包 |
| compile | 編譯項(xiàng)目的源代碼 |
| process-classes | 后處理編譯生成的文件,例如對(duì)Java類進(jìn)行字節(jié)碼增強(qiáng)(bytecode enhancement) |
| generate-test-sources | 生成所有包含在測(cè)試編譯過程中的測(cè)試源碼 |
| process-test-sources | 處理測(cè)試源碼,比如過濾一些值 |
| generate-test-resources | 生成測(cè)試需要的資源文件 |
| process-test-resources | 復(fù)制并處理測(cè)試資源文件至測(cè)試目標(biāo)目錄 |
| test-compile | 編譯測(cè)試源碼至測(cè)試目標(biāo)目錄 |
| test | 使用合適的單元測(cè)試框架運(yùn)行測(cè)試。這些測(cè)試應(yīng) 該不需要代碼被打包或發(fā)布 |
| prepare-package | 在真正的打包之前,執(zhí)行一些準(zhǔn)備打包必要的操 作 |
| package | 將編譯好的代碼打包成可分發(fā)的格式,如 JAR,WAR,或者EAR |
| pre-integration-test | 執(zhí)行一些在集成測(cè)試運(yùn)行之前需要的動(dòng)作。如建 立集成測(cè)試需要的環(huán)境 |
| integration-test | 如果有必要的話,處理包并發(fā)布至集成測(cè)試可以 運(yùn)行的環(huán)境 |
| post-integration-test | 執(zhí)行一些在集成測(cè)試運(yùn)行之后需要的動(dòng)作。如清 理集成測(cè)試環(huán)境。 |
| verify | 執(zhí)行所有檢查,驗(yàn)證包是有效的,符合質(zhì)量規(guī)范 |
| install | 安裝包至本地倉(cāng)庫(kù),以備本地的其它項(xiàng)目作為依 賴使用 |
| deploy | 復(fù)制最終的包至遠(yuǎn)程倉(cāng)庫(kù),共享給其它開發(fā)人員 和項(xiàng)目(通常和一次正式的發(fā)布相關(guān)) |
?
可見,構(gòu)建生命周期被細(xì)分成了22個(gè)階段,但是我們沒必要對(duì)每個(gè)階段都了如指掌,經(jīng)常關(guān)聯(lián)使用的只有process-test-resources、test、package、install、deploy等幾個(gè)階段而已。
?
一般來說,位置稍后的過程都會(huì)依賴于之前的過程。這也就是為什么我們運(yùn)行“mvn install” 的時(shí)候,代碼會(huì)被編譯,測(cè)試,打包。當(dāng)然,maven同樣提供了配置文件,可以依照用戶要求,跳過某些階段。比如有時(shí)候希望跳過測(cè)試階段而直接install,因?yàn)閱卧獪y(cè)試如果有任何一條沒通過,maven就會(huì)終止后續(xù)的工作。
?
?
Site生命周期
?
?
| Site生命周期 | |
| pre-site | 執(zhí)行一些需要在生成站點(diǎn)文檔之前完成的工作 |
| site | 生成項(xiàng)目的站點(diǎn)文檔 |
| post-site | 執(zhí)行一些需要在生成站點(diǎn)文檔之后完成的工作,并且為部署做準(zhǔn)備 |
| site-deploy | 將生成的站點(diǎn)文檔部署到特定的服務(wù)器上 |
?
?
這里經(jīng)常用到的是site階段和site-deploy階段,用以生成和發(fā)布Maven站點(diǎn),這是Maven相當(dāng)強(qiáng)大的功能。
轉(zhuǎn)載于:https://www.cnblogs.com/qilihu/p/6289853.html
總結(jié)
以上是生活随笔為你收集整理的Maven之(二)Maven生命周期的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Effective java -- 2
- 下一篇: Angular2 - Starter -