2007年2月3日

使用 Maven 2 的一些心得

經過一陣子的練習與試用後,設為 Maven 2 應該真的可以簡化 Java 軟體的部署與追蹤動作。

怎麼說呢?

  1. 快速完成專案初始作業:透過定型化的目錄結構,不只可以迅速的完成專案的初始化階段,還可以快速的將原先的軟體專案轉換到 Maven 2 上。
  2. 完整的專案狀態報表支援:透過自動化發佈功能可以讓專案成員甚或使用者隨時掌握專案進度。
  3. 支援 SCM 源碼管理系統:這部份目前還沒玩到,不過也許日後會有一個專案放棄 POM 的檔案庫專區,然後於半夜時分自行 checkout 專案的相關 pom.xml 檔後,再透過 Maven 2 自動 export (我很難理解為什麼大家都喜歡用 co 做 checkout 的動作)出所有的源碼,然後再進行 compile、test、deploy 等等程序,然後還會把整個專案的狀態更新到網站中。
  4. 支援多階層專案管理:類似 Subversion 的 external 屬性,在專案的 code reuse 上提供了相當程度的支援。怎麼在 Maven 2 與 Subversion 兩個相似功能之間進行搭配可能是個有趣的議題。
  5. 相較於 Maven 1 ,Maven 2 的設定真的簡單許多。
前述的第 1 及 第 2 點是目前最重要的心得,而第 3 及第 4 點是後續要練習的部份。

不過使用 Maven 2 上最大的困擾是卡在如何讓 Maven 2 將整個開發環境給塞進 jar / war 檔中。先前曾提到個人習慣將完整開發設定附在打包的 jar 或 war 檔上,這樣做等於是提供了一個備份機制在正式運作的系統中,即使開發用主機陣亡時也能迅速的從正式系統中下載 jar / war 檔接觸進行開發。當然這樣的思考方式其實和使用 SCM 有點相違背,畢竟所有的資料可以重新由 SCM 中 checkout 出來即可,但是未來接手的人會不會習慣使用 SCM 呢?天知道。

另外也同時思考如何讓 Maven 2 在建立目標檔案時能與 Subversion 間版本號同步的問題,有點類似 build number 的概念,像是如果 Subversion 檔案庫中目前的記錄版本是 Rev: 123 ,而 pom.xml 中指定的軟體版本是 1.0 時,能組態出 myPackage-1.0.123.jar 這樣的檔案名稱。透過 filter 不知可否達成?