用Maven做項目管理

 

1        簡介<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Maven 作爲 Apache 的一個開源項目,旨在給項目管理提供更多的支持,主頁地址爲 http://maven.apache.org 。它最早的意圖只是爲了給 apache 組織的幾個項目提供統一的開發、測試、打包和部署,能讓開發者在多個項目中方便的切換。很多偉大的事業,出發點都很簡單, ebay 就是很好的例證。而 maven 的成功又一次驗證了這一點,越來越多的項目開始使用 maven

基本原理

Maven 的基本原理很簡單,採用遠程倉庫和本地倉庫以及一個類似 build.xml pom.xml ,將 pom.xml 中定義的 jar 文件從遠程倉庫下載到本地倉庫,各個應用使用同一個本地倉庫的 jar ,同一個版本的 jar 只需下載一次,而且避免每個應用都去拷貝 jar 。如圖 1 。同時它採用了現在流行的插件體系架構,只保留最小的核心,其餘功能都通過插件的形式提供,所以 maven 下載很小( 1.1M ),在執行 maven 任務時,纔會自動下載需要的插件。

這個基本原理與 Pear ――PHP擴展與應用庫( the PHP Extension and Application Repository )的原理非常相似,都有一個官方的倉庫,都是微內核,通過網絡將需要的文件下載到本地,通過官方倉庫將相應的類庫進行統一管理。 Pear 已經成爲 PHP 開發事實上的標準,而 Maven Java 世界的地位也逐漸加強,成爲標準指日可待。

另外由於插件的易開發性,現在有了非常多的可供選擇的插件,如與 eclipse 結合的插件,與 test 相關的插件,後面我們結合 maven 在項目中的使用進行詳細介紹。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


1

2        項目管理

Maven 官方把 maven 定義爲一個項目管理工具,我們不妨看看 maven 能給我們的項目提供哪些好的支持。

2.1       項目標準化

Maven 一個重要特性是定義了項目的標準模板,官方說法是最佳實踐。可以通過命令: mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app 創建一個單一的 maven 項目。創建好的項目,具有了特定的項目結構。這個項目結構是參考業界的最佳實踐而成,爲後面使用統一的 maven 命令打下了基礎,如測試 mvn test 、打包 mvn package 等,無需寫一行腳本,就可以方便的實現衆多功能。 Maven 還提供其它一些類型模板,可以通過添加 -DarchetypeArtifactId= type }創建,如 -DarchetypeArtifactId=maven-archetype-site ,生成 site 類型的項目。

同時一些好的開源軟件使用了 maven ,也能作爲很好的項目模板,如 Equinox Appfuse 的簡化版),它的 pom 定義了對 hiberante,spring… 的依賴,可以通過 ant new -Dapp.name=NAME 快速生成項目原型,然後對 pom 文件進行裁減,以符合自身項目的需要。

有了這個標準,項目間能方便的進行交流,你也很容易瞭解其它使用 maven 項目的結構。對於企業來說,引入 maven 就自然引入了規範,這可比費時費力的寫文檔,定規範有效的多了。

2.2       文檔和報告

使用 mvn site 可以快速生成項目站點, apache 很多開源項目站點都採用 maven 生成,會出現 built by maven 字樣的圖標。

maven 提供的針對如 junit checkstyle pmd 等的插件,能夠方便的進行測試和檢查並能直接生成報告。使用都很簡單,如 mvn surefire-report:report 就能自動進行 junit 測試,並生成 junit 報告, mvn pmd:pmd 生成 pmd 報告。具體使用可以在 http://maven.apache.org/plugins/index.html 找到。

2.3       類庫管理

Maven 一個很重要的特色就是類庫管理。通過在 pom.xml 中定義 jar 包版本和依賴,能夠方便的管理 jar 文件。以下是一個簡單的 jar 定義片斷:

<dependency>                                                                      

      <groupId>org.hibernate</groupId>

      <artifactId>hibernate</artifactId>

      <version>3.1</version>

      <type>jar</type>

      <scope>runtime</scope>

  </dependency>

這個片斷告訴我們,依賴的 jar groupId org.hibernate artifactId hibernate ,版本爲 3.1 scope runtime 。在實際項目中,會將 M2_REPO(maven 本地倉庫地址 )/ org/hibernate / hibernate /3.1/ hibernate -3.1.jar 放入 classpath

同時 maven 會通過 pom.xml 管理 jar 包間的依賴。比如上面的 hibernate-3.1.jar 同級目錄肯定會有一個 hibernate -3.1.pom ,在這個 pom 文件中指定了這個 jar 對其它一些 jar 的依賴。而這個 pom 文件是遠程倉庫提供,無需進行修改,執行 maven 相關命令就會自動根據相關依賴去下載 jar 包。這樣只需定義對 hibernate 的依賴而無需關心相關 jar ,在構建項目上方便了很多。

因爲 pom 文件對 jar 的管理,也產生了一個很吸引人的特性:項目文件很小。以往一個 web 項目中, jar 文件都要放入 WEB-INF/lib 下,並放入 cvs(svn) 中,很容易就達到幾十 M 。而通過 maven ,只需一個 pom.xml ,在執行 mvn eclipse:eclipse 時再去遠程倉庫下載,項目文件一般只需幾百 K

2.4       發佈管理

使用 maven 可以方便的進行項目發表管理。在項目開發到一定階段,可以使用 mvn package 打包,它會自動先運行 mvn test ,跑所有的 testcase ,只有全部通過才能正確打包。生成的 war 包(如果項目的 packaging war )在 target 目錄下。這個 war 包與使用 ant 腳本生成一樣,但無需一行腳本,這也是 maven 對比 ant 的優勢之一。使用 mvn install 將編譯和打包好的文件發佈到 distributionManager 指定的遠程 repository 。使用 mvn deploy 可以自動管理項目版本。

 

3         使用 maven

Maven 使用簡單,插件豐富且經過大量項目考驗,在項目中引入的風險很小。筆者在項目中使用 maven ,新進員工在半小時內就能成功使用 maven 構建項目,並很快掌握幾個常用的命令。 Maven 也不需要什麼特殊的設施。如果項目全部使用開源軟件,並且不需要 maven 管理項目版本,只需要一個 SCM 環境( CVS SVN ),共享開發源碼就可以。把 pom.xml 中的 repository 設爲官方地址就行,配置如下:

<repository>

      <id>central</id>

      <url>http://www.ibiblio.org/maven2</url>

</repository>

這個官方 remote repository 上有非常多的開源軟件,應該能滿足大部分項目的需要。如果有項目需要而它上面暫時還沒有的軟件,或者希望使用公司內部的軟件,那麼就需要自己配置一個 repository 了。

3.1       自建私服

傳奇私服大家應該都聽過,一個網吧自己搞個私服,一夥人免費在上面砍殺。官方因此少賺了很多錢,因此總想打擊。而 maven 官方卻對自建私服很是支持,我們總算可以正正當當搞把私服了( Springside 的老大江南白衣就是創建私服的好手)。我們就來介紹下自建私服的最快方法。

首先需要一個 http server ,找臺服務器裝上 apache 就行。放一個空的 maven 目錄到 htdocs 下,假設服務器 ip 192.168.0.1 ,確認能用 http://192.168.0.1/maven 訪問到。然後在自己機器上裝好 maven2 ,初始化好項目,在 pom.xml 放入需要的 jar 定義,運行如 mvn eclipse:eclipse 就自動從官方下載 jar 到本地,如果不做配置,默認本地 repository ${user.home}/.m2/ 。對於 windows xp 來說一般在 C:/Documents and Settings/ username%/.m2 下,其中% username %爲操作系統登錄用戶名。這時你可以看到 ${user.home}/.m2/ 下多了個 repository 目錄,裏面有很多的項目相關 jar ,目錄按 groupId/ artifactId/version 排好。把 repository 目錄整個拷貝到 apache 服務器的 maven 目錄下,如果需要官方缺少的 jar 或公司內部 jar ,仿照這個目錄結構,做好 jar 放到 maven 目錄下。自建私服成功!

要使用私服,只需修改 pom.xml ,在 repository 配置後加上:

<repository>

      <id>companyName</id>

      <url>http:// ${ip}/maven</url>

</repository>

這樣需要下載 jar 時,會先到本地 repository 查看,沒有下載過再到官方搜索,沒有找到再到後面的 repository 查找。

3.2       安裝配置

Maven 的安裝很簡單:

1.         apache 網站上下載 maven 安裝包,實際上就是個壓縮文件。將其解壓到你想要存放 maven 的目錄中。在這裏假設你將 maven 解壓到 C:/Program Files/Apache Software Foundation/maven-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2.0.4 中。

2.       C:/Program Files/Apache Software Foundation/maven-2.0.4/bin 設到你的系統環境變量%PATH%中。

3.       同時確保你已經將你的JDK安裝目錄設爲java_home系統變量。

4.         打開個命令行窗口,運行 mvn –version 驗證是否安裝成功。

5.         如果使用 eclipse ,在運行 mvn eclipse:eclipse 生成 eclipse 項目文件後,需加入 M2_REPO Classpath Variables 中,指向 本地 repository ,例如: C:/Documents and Settings/Owner/.m2/repository

3.3       基本使用流程

在項目進程中,不必做什麼配置,在 pom.xml 同級目錄, cmd 使用簡單的 maven 命令,就可以完成初始化 -> 開發 -> 測試 -> 發佈 的全過程。 Maven 的基本使用流程如下圖:

其中在初次使用命令 mvn eclipse:eclipse 時會下載很多的插件和 jar ,可能需要較長的時間,建議泡杯咖啡,和同事吹吹牛。如果失敗,可能是網絡問題,可以重新運行 mvn eclipse:eclipse ,已下載好的插件和 jar 不會再下。運行 mvn test mvn package 等命令,產出物都會放在 target 目錄下。如果在使用過程中有什麼問題,也可以和我聯繫, mail:[email protected] ,我們一起來嘗試解決。

 

總結:

Maven 作爲新的項目管理工具,簡單易用,能對項目的各個階段提供大力支持,同時由於它易擴展的插件體系架構,出現了越來越多的插件,也使得其功能更加強大。短短一篇文章,實在很難把其特點一一盡述, maven 還有很多好用的功能和插件等待我們去使用和開發。而學習新技術的最好方式就是實踐,大家如果有興趣,儘快下載一個最新版,開始你的 maven 之旅吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章