在程序員發表的一篇maven文章,跟你們共享。
用 Maven 作項目管理 html
在 Java世界中咱們不少的開發人員選擇用 Ant來構建項目,一個 build.xml可以完成編譯、測試、打包、部署等不少任務,但咱們也碰到了不少的問題,如 jar文件管理混亂,各個項目結構和 build.xml相差很大等等。而 Maven的出現,給項目提供了更多的支持。 java
用maven的好處:程序員
Maven中使用約定,約定java源代碼代碼必須放在哪一個目錄下,編譯好的java代碼又必須放到哪一個目錄下,這些目錄都有明確的約定。web
Maven的每個動做都擁有一個生命週期,例如執行 mvn install 就能夠自動執行編譯,測試,打包等構建過程spring
只須要定義一個pom.xml,而後把源碼放到默認的目錄,Maven幫咱們處理其餘事情apache
使用Maven能夠進行項目高度自動化構建,依賴管理(這是使用Maven最大的好處),倉庫管理。網絡
Maven 做爲 Apache 的一個開源項目,旨在給項目管理提供更多的支持,主頁地址爲 http://maven.apache.org 。它最先的意圖只是爲了給 apache 組織的幾個項目提供統一的開發、測試、打包和部署,能讓開發者在多個項目中方便的切換。不少偉大的事業,出發點都很簡單, ebay 就是很好的例證。而 maven 的成功又一次驗證了這一點,愈來愈多的項目開始使用 maven 。 架構
基本原理 app
Maven 的基本原理很簡單,採用遠程倉庫和本地倉庫以及一個相似 build.xml 的 pom.xml ,將 pom.xml 中定義的 jar 文件從遠程倉庫下載到本地倉庫,各個應用使用同一個本地倉庫的 jar ,同一個版本的 jar 只需下載一次,並且避免每一個應用都去拷貝 jar 。如圖 1 。同時它採用瞭如今流行的插件體系架構,只保留最小的核心,其他功能都經過插件的形式提供,因此 maven 下載很小( 1.1M ),在執行 maven 任務時,纔會自動下載須要的插件。 eclipse
這個基本原理與 Pear ――PHP擴展與應用庫( the PHP Extension and Application Repository )的原理很是類似,都有一個官方的倉庫,都是微內核,經過網絡將須要的文件下載到本地,經過官方倉庫將相應的類庫進行統一管理。 Pear 已經成爲 PHP 開發事實上的標準,而 Maven 在 Java 世界的地位也逐漸增強,成爲標準指日可待。
另外因爲插件的易開發性,如今有了很是多的可供選擇的插件,如與 eclipse 結合的插件,與 test 相關的插件,後面咱們結合 maven 在項目中的使用進行詳細介紹。
圖 1
Maven 官方把 maven 定義爲一個項目管理工具,咱們不妨看看 maven 能給咱們的項目提供哪些好的支持。
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 就天然引入了規範,這可比費時費力的寫文檔,定規範有效的多了。
使用 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 找到。
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 。
使用 maven 能夠方便的進行項目發表管理。在項目開發到必定階段,可使用 mvn package 打包,它會自動先運行 mvn test ,跑全部的 testcase ,只有所有經過才能正確打包。生成的 war 包(若是項目的 packaging 爲 war )在 target 目錄下。這個 war 包與使用 ant 腳本生成同樣,但無需一行腳本,這也是 maven 對比 ant 的優點之一。使用 mvn install 將編譯和打包好的文件發佈到 distributionManager 指定的遠程 repository 。使用 mvn deploy 能夠自動管理項目版本。
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 了。
Maven 的安裝很簡單:
1. 從 apache 網站上下載 maven 安裝包,實際上就是個壓縮文件。將其解壓到你想要存放 maven 的目錄中。在這裏假設你將 maven 解壓到 C:\Program Files\Apache Software Foundation\maven-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 。
在項目進程中,沒必要作什麼配置,在 pom.xml 同級目錄, cmd 使用簡單的 maven 命令,就能夠完成初始化 -> 開發 -> 測試 -> 發佈 的全過程。 Maven 的基本使用流程以下圖:
其中在初次使用命令 mvn eclipse:eclipse 時會下載不少的插件和 jar ,可能須要較長的時間,建議泡杯咖啡,和同事吹吹牛。若是失敗,多是網絡問題,能夠從新運行 mvn eclipse:eclipse ,已下載好的插件和 jar 不會再下。運行 mvn test 和 mvn package 等命令,產出物都會放在 target 目錄下。若是在使用過程當中有什麼問題,也能夠和我聯繫, mail:pesome@gmail.com ,咱們一塊兒來嘗試解決。
總結:
Maven 做爲新的項目管理工具,簡單易用,能對項目的各個階段提供大力支持,同時因爲它易擴展的插件體系架構,出現了愈來愈多的插件,也使得其功能更增強大。短短一篇文章,實在很難把其特色一一盡述, maven 還有不少好用的功能和插件等待咱們去使用和開發。而學習新技術的最好方式就是實踐,你們若是有興趣,儘快下載一個最新版,開始你的 maven 之旅吧!
做者簡介:張俊,網名 pesome ,上海交大軟件工程碩士, 2 年 JavaEE 開發經驗,資歷尚淺。去年下半年開始接觸 spring 等開源軟件,併產生了濃厚的興趣。今年 3 月開始作 www.openfans.net ,用一堆開源軟件搭建而成,但願爲中國的開源事業作出一點貢獻。
參考文檔:
1. http://maven.apache.org 官方網站文檔
2. http://www-128.ibm.com/developerworks/cn/opensource/os-maven2/ Maven2 的新特性