Maven-07-核心概念 lifecycle

還記得我們在 Maven-04-建置專案 裡所執行的 mvn install 嗎?

這個指令讓我們完成了專案的編譯、測試、打包、安裝(到repository)等步驟,而在上一篇 Maven-06-核心概念 plugins and goals 我們知道這些任務都是由各種 plugins 來負責的。那為什麼這樣一個簡短的指令可以一次完成這麼多任務呢?

我們必須要先了解所謂的 maven lifecycle,區分為以下三個種類:

  • clean: 把建置好的專案相關產出檔案給清除掉 (刪除 target 資料夾)
  • site: 產生專案網站,如下圖範例

    Screen Shot 2017-03-14 at 2.52.21 PM
  • default:  內建的lifecycle,專案建置的流程都是在這裡定義的

maven lifecycle 裡還定義了多個 build phase,我們之前所執行的 mvn install,就是執行了 default lifecycle 裡 install 這個 build phase,有關 lifecycle build phases 的詳細定義,可以參考 https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

從以上的 lifecycle 官方文件,我們可以看到 default lifecycle 有20幾個 build phase,而 install 是倒數第二個,這邊有一點要特別注意的是,雖然我們下的指令是 mvn install,但 maven 會從第一個 build phase (validate) 一路按順序執行到 install,這個現象其實也很容易理解,畢竟沒有之前 build phase 的產物的話,maven 也不知道應該 install 什麼東西

回到最一開始的問題:為什麼 mvn install 一個指令可以完成這麼多任務呢?原因在於  plugin goals 可以指定這個 goal 會在哪個 lifecycle build phase 裡執行 (如果沒有特別指定的話,也會有預設值)。所在在執行 mvn install 時,maven 會去找找有哪些 plugin goals 指定了  build phase,然後就依照 lifecycle 的順序執行下去。lifecycle 與 plugin goals 的對應關係,可參考 https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Built-in_Lifecycle_Bindings

我們可以非常靈活地使用 plugin goals 來完成各種任務,但不同的專案可能會有不同的plugin goals 使用方式,只有透過 lifecycle 這麼一套 maven 制定的標準流程,之後在轉換到開發其他 maven 專案時,我們還是可以使用一致的指令來建置專案,無形之中為開發人員減輕了不少負擔!

Facebook Comments