您好,登錄后才能下訂單哦!
什么是構建生命周期
構建生命周期是一組階段的序列(sequence of phases),這些構建生命周期中的每一個由構建階段的不同列表定義,其中構建階段表示生命周期中的階段。
例如,默認(default)的生命周期包括以下階段(注意:這里是簡化的階段,用于生命周期階段的完整列表):
驗證(validate) - 驗證項目是否正確,所有必要的信息可用
編譯(compile) - 編譯項目的源代碼
測試(test) - 使用合適的單元測試框架測試編譯的源代碼。這些測試不應該要求代碼被打包或部署
打包(package) - 采用編譯的代碼,并以其可分配格式(如JAR)進行打包。
驗證(verify) - 對集成測試的結果執行任何檢查,以確保滿足質量標準
安裝(install) - 將軟件包安裝到本地存儲庫中,用作本地其他項目的依賴項
部署(deploy) - 在構建環境中完成,將最終的包復制到遠程存儲庫以與其他開發人員和項目共享。每個階段定義了目標被執行的順序。這里的階段是生命周期的一部分。
舉例說明,一個典型的 Maven 構建生命周期是由以下幾個階段的序列組成的:
階段 | 處理 | 描述 |
---|---|---|
prepare-resources | 資源拷貝 | 本階段可以自定義需要拷貝的資源 |
compile | 編譯 | 本階段完成源代碼編譯 |
package | 打包 | 本階段根據 pom.xml 中描述的打包配置創建 JAR / WAR 包 |
install | 安裝 | 本階段在本地 / 遠程倉庫中安裝工程包 |
當需要在某個特定階段之前或之后執行目標時,可以使用 pre 和 post 來定義這個目標。
當 Maven 開始構建工程,會按照所定義的階段序列的順序執行每個階段注冊的目標。Maven 有以下三個標準的生命周期:
clean
default(or build)
site
目標表示一個特定的、對構建和管理工程有幫助的任務。它可能綁定了 0 個或多個構建階段。沒有綁定任何構建階段的目標可以在構建生命周期之外被直接調用執行。
執行的順序依賴于目標和構建階段被調用的順序。例如,考慮下面的命令。clean 和 package 參數是構建階段,而 dependency:copy-dependencies 是一個目標。
mvn clean dependency:copy-dependencies package
這里的 clean 階段將會被首先執行,然后 dependency:copy-dependencies 目標會被執行,最終 package 階段被執行。
Clean 生命周期
當我們執行 mvn post-clean 命令時,Maven 調用 clean 生命周期,它包含以下階段。
pre-clean
clean
post-clean
Maven 的 clean 目標(clean:clean)綁定到了 clean 生命周期的 clean 階段。它的 clean:clean 目標通過刪除構建目錄刪除了構建輸出。所以當 mvn clean 命令執行時,Maven 刪除了構建目錄。
我們可以通過在上面的 clean 生命周期的任何階段定義目標來修改這部分的操作行為。
在下面的例子中,我們將 maven-antrun-plugin:run 目標添加到 pre-clean、clean 和 post-clean 階段中。這樣我們可以在 clean 生命周期的各個階段顯示文本信息。
我們已經在 C:\MVN\project 目錄下創建了一個 pom.xml 文件。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.pre-clean</id> <phase>pre-clean</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>pre-clean phase</echo> </tasks> </configuration> </execution> <execution> <id>id.clean</id> <phase>clean</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>clean phase</echo> </tasks> </configuration> </execution> <execution> <id>id.post-clean</id> <phase>post-clean</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>post-clean phase</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
現在打開命令控制臺,跳轉到 pom.xml 所在目錄,并執行下面的 mvn 命令。
C:\MVN\project>mvn post-clean
Maven 將會開始處理并顯示 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 命令,來顯示 pre-clean 和 clean,而在 post-clean 階段不執行任何操作。
Default (or Build) 生命周期
這是 Maven 的主要生命周期,被用于構建應用。包括下面的 23 個階段。
生命周期階段 | 描述 |
---|---|
validate | 檢查工程配置是否正確,完成構建過程的所有必要信息是否能夠獲取到。 |
initialize | 初始化構建狀態,例如設置屬性。 |
generate-sources | 生成編譯階段需要包含的任何源碼文件。 |
process-sources | 處理源代碼,例如,過濾任何值(filter any value)。 |
generate-resources | 生成工程包中需要包含的資源文件。 |
process-resources | 拷貝和處理資源文件到目的目錄中,為打包階段做準備。 |
compile | 編譯工程源碼。 |
process-classes | 處理編譯生成的文件,例如 Java Class 字節碼的加強和優化。 |
generate-test-sources | 生成編譯階段需要包含的任何測試源代碼。 |
process-test-sources | 處理測試源代碼,例如,過濾任何值(filter any values)。 |
test-compile | 編譯測試源代碼到測試目的目錄。 |
process-test-classes | 處理測試代碼文件編譯后生成的文件。 |
test | 使用適當的單元測試框架(例如JUnit)運行測試。 |
prepare-package | 在真正打包之前,為準備打包執行任何必要的操作。 |
package | 獲取編譯后的代碼,并按照可發布的格式進行打包,例如 JAR、WAR 或者 EAR 文件。 |
pre-integration-test | 在集成測試執行之前,執行所需的操作。例如,設置所需的環境變量。 |
integration-test | 處理和部署必須的工程包到集成測試能夠運行的環境中。 |
post-integration-test | 在集成測試被執行后執行必要的操作。例如,清理環境。 |
verify | 運行檢查操作來驗證工程包是有效的,并滿足質量要求。 |
install | 安裝工程包到本地倉庫中,該倉庫可以作為本地其他工程的依賴。 |
deploy | 拷貝最終的工程包到遠程倉庫中,以共享給其他開發人員和工程。 |
有一些與 Maven 生命周期相關的重要概念需要說明:
當一個階段通過 Maven 命令調用時,例如 mvn compile,只有該階段之前以及包括該階段在內的所有階段會被執行。
不同的 maven 目標將根據打包的類型(JAR / WAR / EAR),被綁定到不同的 Maven 生命周期階段。
在下面的例子中,我們將 maven-antrun-plugin:run 目標添加到 Build 生命周期的一部分階段中。這樣我們可以顯示生命周期的文本信息。
我們已經更新了 C:\MVN\project 目錄下的 pom.xml 文件。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.validate</id> <phase>validate</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>validate phase</echo> </tasks> </configuration> </execution> <execution> <id>id.compile</id> <phase>compile</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>compile phase</echo> </tasks> </configuration> </execution> <execution> <id>id.test</id> <phase>test</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>test phase</echo> </tasks> </configuration> </execution> <execution> <id>id.package</id> <phase>package</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>package phase</echo> </tasks> </configuration> </execution> <execution> <id>id.deploy</id> <phase>deploy</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>deploy phase</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
現在打開命令控制臺,跳轉到 pom.xml 所在目錄,并執行以下 mvn 命令。
C:\MVN\project>mvn compile
Maven 將會開始處理并顯示直到編譯階段的構建生命周期的各個階段。
[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 插件一般用來創建新的報告文檔、部署站點等。
階段:
pre-site
site
post-site
site-deploy
在下面的例子中,我們將 maven-antrun-plugin:run 目標添加到 Site 生命周期的所有階段中。這樣我們可以顯示生命周期的所有文本信息。
我們已經更新了 C:\MVN\project 目錄下的 pom.xml 文件。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.pre-site</id> <phase>pre-site</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>pre-site phase</echo> </tasks> </configuration> </execution> <execution> <id>id.site</id> <phase>site</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>site phase</echo> </tasks> </configuration> </execution> <execution> <id>id.post-site</id> <phase>post-site</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>post-site phase</echo> </tasks> </configuration> </execution> <execution> <id>id.site-deploy</id> <phase>site-deploy</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>site-deploy phase</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
現在打開命令控制臺,跳轉到 pom.xml 所在目錄,并執行以下 mvn 命令。
C:\MVN\project>mvn site
Maven 將會開始處理并顯示直到 site 階段的 site 生命周期的各個階段。
[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] ------------------------------------------------------------------```
以上就是本文關于Maven構建生命周期詳細介紹的全部內容,希望對大家有所幫助。歡迎參閱:Maven管理SpringBoot Profile詳解、maven學習-初窺門徑、使用maven運行Java Main的三種方法解析等,如有不足之處,歡迎留言指出,感謝朋友們對本站的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。