什么是構(gòu)建生命周期
創(chuàng)新互聯(lián)公司專(zhuān)業(yè)為企業(yè)提供同安網(wǎng)站建設(shè)、同安做網(wǎng)站、同安網(wǎng)站設(shè)計(jì)、同安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、同安企業(yè)網(wǎng)站模板建站服務(wù),10年同安做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
構(gòu)建生命周期是一組階段的序列(sequence of phases),這些構(gòu)建生命周期中的每一個(gè)由構(gòu)建階段的不同列表定義,其中構(gòu)建階段表示生命周期中的階段。
例如,默認(rèn)(default)的生命周期包括以下階段(注意:這里是簡(jiǎn)化的階段,用于生命周期階段的完整列表):
驗(yàn)證(validate) - 驗(yàn)證項(xiàng)目是否正確,所有必要的信息可用
編譯(compile) - 編譯項(xiàng)目的源代碼
測(cè)試(test) - 使用合適的單元測(cè)試框架測(cè)試編譯的源代碼。這些測(cè)試不應(yīng)該要求代碼被打包或部署
打包(package) - 采用編譯的代碼,并以其可分配格式(如JAR)進(jìn)行打包。
驗(yàn)證(verify) - 對(duì)集成測(cè)試的結(jié)果執(zhí)行任何檢查,以確保滿(mǎn)足質(zhì)量標(biāo)準(zhǔn)
安裝(install) - 將軟件包安裝到本地存儲(chǔ)庫(kù)中,用作本地其他項(xiàng)目的依賴(lài)項(xiàng)
部署(deploy) - 在構(gòu)建環(huán)境中完成,將最終的包復(fù)制到遠(yuǎn)程存儲(chǔ)庫(kù)以與其他開(kāi)發(fā)人員和項(xiàng)目共享。每個(gè)階段定義了目標(biāo)被執(zhí)行的順序。這里的階段是生命周期的一部分。
舉例說(shuō)明,一個(gè)典型的 Maven 構(gòu)建生命周期是由以下幾個(gè)階段的序列組成的:
階段 | 處理 | 描述 |
---|---|---|
prepare-resources | 資源拷貝 | 本階段可以自定義需要拷貝的資源 |
compile | 編譯 | 本階段完成源代碼編譯 |
package | 打包 | 本階段根據(jù) pom.xml 中描述的打包配置創(chuàng)建 JAR / WAR 包 |
install | 安裝 | 本階段在本地 / 遠(yuǎn)程倉(cāng)庫(kù)中安裝工程包 |
當(dāng)需要在某個(gè)特定階段之前或之后執(zhí)行目標(biāo)時(shí),可以使用 pre 和 post 來(lái)定義這個(gè)目標(biāo)。
當(dāng) Maven 開(kāi)始構(gòu)建工程,會(huì)按照所定義的階段序列的順序執(zhí)行每個(gè)階段注冊(cè)的目標(biāo)。Maven 有以下三個(gè)標(biāo)準(zhǔn)的生命周期:
clean
default(or build)
site
目標(biāo)表示一個(gè)特定的、對(duì)構(gòu)建和管理工程有幫助的任務(wù)。它可能綁定了 0 個(gè)或多個(gè)構(gòu)建階段。沒(méi)有綁定任何構(gòu)建階段的目標(biāo)可以在構(gòu)建生命周期之外被直接調(diào)用執(zhí)行。
執(zhí)行的順序依賴(lài)于目標(biāo)和構(gòu)建階段被調(diào)用的順序。例如,考慮下面的命令。clean 和 package 參數(shù)是構(gòu)建階段,而 dependency:copy-dependencies 是一個(gè)目標(biāo)。
mvn clean dependency:copy-dependencies package
這里的 clean 階段將會(huì)被首先執(zhí)行,然后 dependency:copy-dependencies 目標(biāo)會(huì)被執(zhí)行,最終 package 階段被執(zhí)行。
Clean 生命周期
當(dāng)我們執(zhí)行 mvn post-clean 命令時(shí),Maven 調(diào)用 clean 生命周期,它包含以下階段。
pre-clean
clean
post-clean
Maven 的 clean 目標(biāo)(clean:clean)綁定到了 clean 生命周期的 clean 階段。它的 clean:clean 目標(biāo)通過(guò)刪除構(gòu)建目錄刪除了構(gòu)建輸出。所以當(dāng) mvn clean 命令執(zhí)行時(shí),Maven 刪除了構(gòu)建目錄。
我們可以通過(guò)在上面的 clean 生命周期的任何階段定義目標(biāo)來(lái)修改這部分的操作行為。
在下面的例子中,我們將 maven-antrun-plugin:run 目標(biāo)添加到 pre-clean、clean 和 post-clean 階段中。這樣我們可以在 clean 生命周期的各個(gè)階段顯示文本信息。
我們已經(jīng)在 C:\MVN\project 目錄下創(chuàng)建了一個(gè) pom.xml 文件。
4.0.0 com.companyname.projectgroup project 1.0 org.apache.maven.plugins maven-antrun-plugin 1.1 id.pre-clean pre-clean run pre-clean phase id.clean clean run clean phase id.post-clean post-clean run post-clean phase
現(xiàn)在打開(kāi)命令控制臺(tái),跳轉(zhuǎn)到 pom.xml 所在目錄,并執(zhí)行下面的 mvn 命令。
C:\MVN\project>mvn post-clean
Maven 將會(huì)開(kāi)始處理并顯示 clean 生命周期的所有階段。
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------ [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [post-clean] [INFO] ------------------------------------------------------------------ [INFO] [antrun:run {execution: id.pre-clean}] [INFO] Executing tasks [echo] pre-clean phase [INFO] Executed tasks [INFO] [clean:clean {execution: default-clean}] [INFO] [antrun:run {execution: id.clean}] [INFO] Executing tasks [echo] clean phase [INFO] Executed tasks [INFO] [antrun:run {execution: id.post-clean}] [INFO] Executing tasks [echo] post-clean phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------ [INFO] Total time: < 1 second [INFO] Finished at: Sat Jul 07 13:38:59 IST 2012 [INFO] Final Memory: 4M/44M [INFO] ------------------------------------------------------------------
你可以嘗試修改 mvn clean 命令,來(lái)顯示 pre-clean 和 clean,而在 post-clean 階段不執(zhí)行任何操作。
Default (or Build) 生命周期
這是 Maven 的主要生命周期,被用于構(gòu)建應(yīng)用。包括下面的 23 個(gè)階段。
生命周期階段 | 描述 |
---|---|
validate | 檢查工程配置是否正確,完成構(gòu)建過(guò)程的所有必要信息是否能夠獲取到。 |
initialize | 初始化構(gòu)建狀態(tài),例如設(shè)置屬性。 |
generate-sources | 生成編譯階段需要包含的任何源碼文件。 |
process-sources | 處理源代碼,例如,過(guò)濾任何值(filter any value)。 |
generate-resources | 生成工程包中需要包含的資源文件。 |
process-resources | 拷貝和處理資源文件到目的目錄中,為打包階段做準(zhǔn)備。 |
compile | 編譯工程源碼。 |
process-classes | 處理編譯生成的文件,例如 Java Class 字節(jié)碼的加強(qiáng)和優(yōu)化。 |
generate-test-sources | 生成編譯階段需要包含的任何測(cè)試源代碼。 |
process-test-sources | 處理測(cè)試源代碼,例如,過(guò)濾任何值(filter any values)。 |
test-compile | 編譯測(cè)試源代碼到測(cè)試目的目錄。 |
process-test-classes | 處理測(cè)試代碼文件編譯后生成的文件。 |
test | 使用適當(dāng)?shù)膯卧獪y(cè)試框架(例如JUnit)運(yùn)行測(cè)試。 |
prepare-package | 在真正打包之前,為準(zhǔn)備打包執(zhí)行任何必要的操作。 |
package | 獲取編譯后的代碼,并按照可發(fā)布的格式進(jìn)行打包,例如 JAR、WAR 或者 EAR 文件。 |
pre-integration-test | 在集成測(cè)試執(zhí)行之前,執(zhí)行所需的操作。例如,設(shè)置所需的環(huán)境變量。 |
integration-test | 處理和部署必須的工程包到集成測(cè)試能夠運(yùn)行的環(huán)境中。 |
post-integration-test | 在集成測(cè)試被執(zhí)行后執(zhí)行必要的操作。例如,清理環(huán)境。 |
verify | 運(yùn)行檢查操作來(lái)驗(yàn)證工程包是有效的,并滿(mǎn)足質(zhì)量要求。 |
install | 安裝工程包到本地倉(cāng)庫(kù)中,該倉(cāng)庫(kù)可以作為本地其他工程的依賴(lài)。 |
deploy | 拷貝最終的工程包到遠(yuǎn)程倉(cāng)庫(kù)中,以共享給其他開(kāi)發(fā)人員和工程。 |
有一些與 Maven 生命周期相關(guān)的重要概念需要說(shuō)明:
當(dāng)一個(gè)階段通過(guò) Maven 命令調(diào)用時(shí),例如 mvn compile,只有該階段之前以及包括該階段在內(nèi)的所有階段會(huì)被執(zhí)行。
不同的 maven 目標(biāo)將根據(jù)打包的類(lèi)型(JAR / WAR / EAR),被綁定到不同的 Maven 生命周期階段。
在下面的例子中,我們將 maven-antrun-plugin:run 目標(biāo)添加到 Build 生命周期的一部分階段中。這樣我們可以顯示生命周期的文本信息。
我們已經(jīng)更新了 C:\MVN\project 目錄下的 pom.xml 文件。
4.0.0 com.companyname.projectgroup project 1.0 org.apache.maven.plugins maven-antrun-plugin 1.1 id.validate validate run validate phase id.compile compile run compile phase id.test test run test phase id.package package run package phase id.deploy deploy run deploy phase
現(xiàn)在打開(kāi)命令控制臺(tái),跳轉(zhuǎn)到 pom.xml 所在目錄,并執(zhí)行以下 mvn 命令。
C:\MVN\project>mvn compile
Maven 將會(huì)開(kāi)始處理并顯示直到編譯階段的構(gòu)建生命周期的各個(gè)階段。
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------ [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [compile] [INFO] ------------------------------------------------------------------ [INFO] [antrun:run {execution: id.validate}] [INFO] Executing tasks [echo] validate phase [INFO] Executed tasks [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\MVN\project\src\main\resources [INFO] [compiler:compile {execution: default-compile}] [INFO] Nothing to compile - all classes are up to date [INFO] [antrun:run {execution: id.compile}] [INFO] Executing tasks [echo] compile phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------ [INFO] Total time: 2 seconds [INFO] Finished at: Sat Jul 07 20:18:25 IST 2012 [INFO] Final Memory: 7M/64M [INFO] ------------------------------------------------------------------
Site 生命周期
Maven Site 插件一般用來(lái)創(chuàng)建新的報(bào)告文檔、部署站點(diǎn)等。
階段:
pre-site
site
post-site
site-deploy
在下面的例子中,我們將 maven-antrun-plugin:run 目標(biāo)添加到 Site 生命周期的所有階段中。這樣我們可以顯示生命周期的所有文本信息。
我們已經(jīng)更新了 C:\MVN\project 目錄下的 pom.xml 文件。
4.0.0 com.companyname.projectgroup project 1.0 org.apache.maven.plugins maven-antrun-plugin 1.1 id.pre-site pre-site run pre-site phase id.site site run site phase id.post-site post-site run post-site phase id.site-deploy site-deploy run site-deploy phase
現(xiàn)在打開(kāi)命令控制臺(tái),跳轉(zhuǎn)到 pom.xml 所在目錄,并執(zhí)行以下 mvn 命令。
C:\MVN\project>mvn site
Maven 將會(huì)開(kāi)始處理并顯示直到 site 階段的 site 生命周期的各個(gè)階段。
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------ [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [site] [INFO] ------------------------------------------------------------------ [INFO] [antrun:run {execution: id.pre-site}] [INFO] Executing tasks [echo] pre-site phase [INFO] Executed tasks [INFO] [site:site {execution: default-site}] [INFO] Generating "About" report. [INFO] Generating "Issue Tracking" report. [INFO] Generating "Project Team" report. [INFO] Generating "Dependencies" report. [INFO] Generating "Project Plugins" report. [INFO] Generating "Continuous Integration" report. [INFO] Generating "Source Repository" report. [INFO] Generating "Project License" report. [INFO] Generating "Mailing Lists" report. [INFO] Generating "Plugin Management" report. [INFO] Generating "Project Summary" report. [INFO] [antrun:run {execution: id.site}] [INFO] Executing tasks [echo] site phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------ [INFO] Total time: 3 seconds [INFO] Finished at: Sat Jul 07 15:25:10 IST 2012 [INFO] Final Memory: 24M/149M [INFO] ------------------------------------------------------------------```
以上就是本文關(guān)于Maven構(gòu)建生命周期詳細(xì)介紹的全部?jī)?nèi)容,希望對(duì)大家有所幫助。歡迎參閱:Maven管理SpringBoot Profile詳解、maven學(xué)習(xí)-初窺門(mén)徑、使用maven運(yùn)行Java Main的三種方法解析等,如有不足之處,歡迎留言指出,感謝朋友們對(duì)本站的支持。