iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
Software Development

我們與Maven的距離系列 第 12

Day11 - Maven lifecycle

  • 分享至 

  • xImage
  •  

前言

前些日子我們談到maven的核心理念約定大於配置,maven規劃了standard layout,再來要談的就是構建的標準流程,有了表準流程我們就可以按表操課,在每個既定的表準流程安排預設的plugin執行他的目標,今日談的就是maven三大lifecycle,各自扮演不同的職責。

Lifecycle

生命週期是什麼呢,簡單的說就是一個開始到結束的過程,它可以分為很多個階段以人生來說,有求學階段、工作階段、退休階段等,當你想要到工作階段勢必要經過求學階段。Maven Lifecycle每個生命周期都有它自己的階段目標,一旦你想執行後面的階段目標,前面的階段目標你都需要走一回。

Default Lifecycle

default生命週期扮演我們build專案所需執行的所有步驟,會以每個階段phase來描述每個步驟,會依據package對象**(jar/war/ear/rar)**的不同針對不同phase綁定預設執行的Plugin,請參考如下各階段說明,內置綁定請參考官網

  • validate:檢查專案是否正確、資訊是否完整。例如確認pom.xml文件是否正確
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources:複製並處理資源文件,至目標目錄,準備打包
  • compile :編譯專案的source code
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources:複製並處理資源文件,至目標測試目錄
  • test-compile :編譯測試源代碼
  • process-test-classes
  • test :使用合適的單元測試框架運行測試。這些測試代碼不會被打包或部署
  • prepare-package
  • package :接受編譯好的代碼,打包成可發布的格式,例如JAR、EAR、WAR
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify:針對整合測試的結果,進一步檢查品質標準是否符合
  • install :將包安裝至本地倉庫,以讓其它項目依賴
  • deploy :將最終的套件複製到remote的倉庫,以讓其它開發人員與項目共享或部署到服務器上運行

Clean Lifecycle

Clean生命周期處理清理的工作,當你程式修改後需要重新將前一次compile的結果處理時可以執行他

  • pre-clean:執行一些需要在clean之前完成的工作
  • clean:移除所有上一次build生成的文件
  • post-clean:執行一些需要在clean後需完成的工作

Site Lifecycle

Site生命周期負責專案訊息的構建

  • pre-site:執行一些需要在生成站點專案訊息文件之前完成的工作
  • site:生成項目的站點專案訊息文件
  • post-site:執行一些需要在生成站點專案訊息文件之後完成的工作,並且為部署做準備
  • site-deploy:將生成的站點專案訊息文件部署到特定的服務器上

Built-in Lifecycle Bindings

我們可以從官網看到Lifecycle的各個phase對應綁定什麼樣的plugin goal在執行,但是還是會很好奇的想看看它寫在哪邊
https://ithelp.ithome.com.tw/upload/images/20250926/20128084wiNACWFkTv.png
https://ithelp.ithome.com.tw/upload/images/20250926/20128084qvouqOg3xD.png

情境題1.你想要將一個Plugin綁進default lifecycle執行該怎麼做?

本題我們以Apache Maven AntRun Plugin,他是一個舊時代的構件工具,這個Plugin可以幫我們執行Ant任務,當然如果你有build.xml文件可以設定路徑去執行他。我們設定讓他顯示console訊息就好

  • <executions>:設定要執行的任務是什麼
  • <phase>:設定在哪個階段執行
  • <goal>:設定要執行的Plugin目標
  • <configuration>:設定要傳給Plugin的參數

修改pom.xml

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-antrun-plugin</artifactId>
      <version>3.1.0</version>
      <executions>
        <execution>
          <phase>compile</phase>
          <goals>
            <goal>run</goal>
          </goals>
          <configuration>
            <target>
              <echo> yaya my binding ant plugin running</echo>
            </target>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

試著找先前的quick-start的專案來執行mvn package
https://ithelp.ithome.com.tw/upload/images/20250926/20128084liszfX5fNZ.png

小結

本日介紹了Maven的三大Lifecycle,default lifecycle負責頻率最高的構建專案流程,記得你執行哪個phase會從第一個phase執行到你的命令phase,並介紹如何將Plugin綁定在生命週期中執行

Reference


上一篇
Day10 - Maven CLI and Plugin
下一篇
Day12 - Dependency Scope
系列文
我們與Maven的距離16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言