1. 程式人生 > >Apache Maven(二):構建生命周期

Apache Maven(二):構建生命周期

二進制文件 lean src 行集 mvn 例如 默認 只需要 brush

Maven 約定的目錄結構

我要遵循Maven已經約定好的目錄結構,才能讓maven在自動構建過程中找到對應的資源進行構建處理。以下是maven約定的目錄結構:

項目名稱				
|-- pom.xml				:Maven工程的核心配置文件
|-- src					
    |-- main				:主程序
    |   |-- java			:JAVA源文件
    |   |-- resources			:框架或其他工具配置文件
    |-- test				:測試程序
        |-- java			:JAVA源文件
        |-- resources			:框架或其他工具配置文件

是我們只需要按照以上的目錄結構進行存放文件,maven就可以自動找到對應文件進行構建處理。除了以上以下目錄外,項目目錄下可能還會存在README.txt,LICENSE.txt,.get,.svn,target等等目錄或文件。

Maven 構建生命周期

Maven基於構建生命周期的核心概念。這意味著構建項目的過程已被明確定義。對於構建項目的人來說,這意味著只需要學習一小組命令和確保POM能得到想要的結果,就能構建任何Maven項目。

Maven有三種內置構建生命周期: default,clean 和 site。

  • default: 生命周期處理項目的部署(後面主講部分);
  • clean : 生命周期清理項目;
  • site : 生命周期處理站點文檔的創建

默認生命周期(項目部署)包含以下幾個階段:

  • validate: 驗證項目是否正確,並提供所有有用的必要信息。
  • compile: 編譯項目的源代碼。
  • test: 使用合適的單元測試框架測試編譯後的源代碼。
  • package: 獲取編譯後的代碼,並將其打包成可發布的格式,比如JAR。
  • verify: 對集成測試結果進行檢查,以確保項目符合質量標準。
  • install: 將軟件包安裝到本地倉庫中,用作本地其他項目的依賴項。
  • deploy: 在構建環境中完成,將最終包復制到遠程倉庫以與其它開發人員和項目共享。

這些生命周期階段將按照順序執行以完成默認的生命周期。這意味著當使用默認生命周期時,Maven先驗證項目,然後編譯源碼,針對測試運行這些代碼,打包成二進制文件(例如jar),運行集成測試包,驗證集成測試,將經過驗證的軟件包安裝到本地倉庫,然後將罵安裝軟件部署到遠程倉庫,依次按照順序執行。

在開發環境中,使用以下命令來構建項目並將其安裝到本地倉庫中:

mvn install

在執行 install 命令之前,此命令會按照默認生命周期階段的執行順序,先執行(validate、compile、package 等命令),只需按照默認周期的最後構建命令install,就可完成此周期。

在構建環境中,可以使用如下命令執行清理構建並且將項目部署到遠程倉庫中。

mvn clean deploy

同一個命令可用於多模塊場景(即具有一個或多個子項目的項目)。Maven遍歷每一個項目並執行clean,然後執行deploy(包括默認生命周期所有deploy之前的步驟)。

構建項目由插件目的組成

然而,盡管構建階段負責構建生命周期的具體步驟,但是履行這些責任的方式可能會有所不同。這是通過聲明插件目標綁定到這些構建階段來完成的。

插件目標代表了一個特定的任務(比構建階段更精細),有助於項目的構建和管理。它可以綁定到零或更多的構建階段。不受任何構建階段限制,可以通過直接調用在構建生命周期之外執行。執行順序取決於調用目標和構建階段的順序,例如以下命令。該命令的clean 和 package 是構建階段,而dependency:copy-dependencies 是一個插件目標。

mvn clean dependency:copy-dependencies package

如果執行此命令操作,則首先執行clean階段(意味著執行clean生命周期之前的操作和clean本身),然後執行dependency:copy-dependencies 插件目標。最後執行package階段(以及默認生命周期所有之前的階段)。

通常用連字符(pre-*,post-* 或 process-*)命名的階段不會直接從命令調用。這些階段對構建進行排序,產生在構建之外無用的中間結果。

參考生命周期

以下列出了 default,clean 和 site 生命周期的所有構建階段。它們按給定指定點的順序執行。

  • clean 的生命周期
    • pre-clean: 執行實際項目清理前所需要的流程。
    • clean: 刪除以前版本生成的文件。
    • post-clean: 執行完成項目清理所需要的過程。
  • default 的生命周期
    • validate: 驗證項目是否正確,並提供所有必要的信息。
    • initialize: 初始化構建狀態,例如設置屬性或創建目錄。
    • generate-sources: 生成包含在編譯中的任何源代碼。
    • process-sources: 處理源代碼,例如過濾一些值。
    • generate-resources: 生成包含在包中的資源。
    • process-resources: 將資源復制並處理到目標目錄中,準備打包。
    • compile: 編譯項目的源代碼。
    • process-classes: 處理從編譯後生成的文件,例如在Java類上進行字節碼增強。
    • generate-test-sources: 生成包含在編譯中的一些測試源代碼。
    • process-test-sources: 處理測試源代碼,例如過濾一些值。
    • generate-test-resources: 創建測試資源文件。
    • process-test-resources: 將資源復制並處理到測試目標目錄中。
    • test-compile: 將測試源代碼編譯到測試目標目錄中。
    • process-test-classes: 從測試編譯後處理生成的文件,例如在Java類上進行字節碼增強
    • test: 使用合適的單元測試框架運行測試。這些測試不應該要求打包或部署代碼。
    • prepare-package: 在實際打包之前執行一些必要的準備打包的操作。這通常會導致軟件包的解壓縮。
    • package: 接受編譯的代碼並將其打包為可發布的格式,例如JAR。
    • pre-integration-test: 在集成測試執行之前執行所需的操作。這可能涉及諸如設置所需環境等事情。
    • integration-test: 如果需要,可將程序包處理並部署到可運行集成測試的環境中。
    • post-integration-test: 執行集成測試後執行所需的操作。這可能包括清理環境。
    • verify: 運行一些檢查來驗證包是否有效並且符合質量標準。
    • install: 將軟件包安裝到本地存儲庫中,作為本地其他項目的依賴項。
    • deploy: 在集成或發行版環境中完成,將最終包復制到遠程存儲庫,以便與其他開發人員和項目共享。
  • site 的生命周期
    • pre-site: 執行實際項目站點生成之前所需的流程。
    • site: 生成項目的網站文檔。
    • post-site: 執行完成網站生成所需的流程,並為網站部署做好準備。
    • site-deploy: 將生成的網站文檔部署到指定的Web服務器。

Apache Maven(二):構建生命周期