天天看點

Maven和Ant的比較

成功的軟體工程需要建構工具。在Java世界中,并不缺少這樣的工具,Ant就是一個标準的典型。

Maven是另一種關于開放資源畫面的項目管理/建構工具。與Ant相比,Maven是一個将Ant概念中幾個步驟深化了的項目管理工具。它不能建立在Ant之上,但它可以利用Ant建構腳本的優勢,甚至生成這種腳本。 

為了使用Maven,你首先必須建立一個項目對象模型(POM)。POM的預設值是project.xml檔案,它描述了程式及其相關性。Maven用POM來建構項目和相關檔案。一旦你有了一個基本的project.xml檔案,你可以把它用作你所有項目的模闆。 

Maven的目标大緻和Ant的類似。Maven還有許多實用的預定目标,如關于編輯、配置、生成檔案、生成Ant建構腳本、建立jars、wars、ears檔案等,都要用到它。如果漏掉了什麼,你可以随意加入自己想要的目标。 

Maven兩個最酷的特點是jar   repositories和項目站點生成。Jar   repositories是包含jar檔案的本地或遠端站點。當你在建立時間證明jar檔案和POM的依賴關系時,Maven将自動将jar檔案所需版本下載下傳到本地存儲庫。這個特點可以讓你更加輕松地建構項目。項目站點生成目标則是建立一個項目的專業網站,包括強調文法的源代碼的連結、代碼格式、javadoc、單體測試等等。 

通常對Maven的一個抱怨是有時它很慢。一些開發人員已使用Maven來建立一個用來日常開發的Ant檔案,然後用Maven配置設定他們的項目或作為晚上程序的一部分。 

無論如何,Maven的這些特點至少讓它值得你認真地考慮。   

1     maven和ant的比較 

  第一:每次和别人說maven的時候,很多會認為是全新的東西而不肯放棄ant。其實,ant腳本是可以直接運作在maven中的。 

如果要說maven和ant有什麼差别,我覺得最大的差别就是在于maven的編譯以及所有的腳本都有一個基礎,就是POM(project   object   model)。這個模型定義了項目的方方面面,然後各式各樣的腳本在這個模型上工作,而ant完全是自己定義,顯然maven更勝一籌。 

第二:Maven對所依賴的包有明确的定義,如使用那個包,版本是多少,一目了然。而ant則通常是簡單的inclde   所有的jar。導緻的最終結果就是,你根本無法确定JBoss中的lib下的common-logging   是哪個版本的,唯一的方法就是打開   META-INF   目錄下MANIFEST.MF。估計JBoss遲早會轉向Maven的。 

第三:Maven是基于中央倉庫的編譯,即把編譯所需要的資源放在一個中央倉庫裡,如jar,tld,pom,等。當編譯的時候,maven會自動在倉庫中找到相應的包,如果本地倉庫沒有,則從設定好的遠端倉庫中下載下傳到本地。這一切都是自動的,而ant需要自己定義了。這個好處導緻的結果就是,用maven編譯的項目在釋出的時候隻需要釋出源碼,小得很,而反之,ant的釋出則要把所有的包一起釋出,顯然maven又勝了一籌。 

第四:maven有大量的重用腳本可以利用,如生成網站,生成javadoc,sourcecode   reference,等。而ant都需要自己去寫。試試   maven   site   的效果。 

第五:maven目前不足的地方就是沒有象ant那樣成熟的GUI界面,不過mavengui正在努力中。目前使用maven最好的方法還是指令行,又快又友善。 

最後,總結一下,轉向maven會為你節省更多的時間。 

當您的項目逐漸變得龐大和複雜時,最好使用一種建構工具來自動建構您的項目。例如,一個典型的java項目,每次建構時都要經曆編譯java源代碼,把class檔案打成.jar包,生成javadocs文檔等步驟。這些步驟都可以用建構工具幫您自動完成。說到建構工具,大家肯定都知道make,但make是依賴具體作業系統的。Java-centric選擇了Ant,一種可以跨平台的使用xml來替換Makefile糟糕文法的建構工具。 

        來自Apache軟體組織的建構工具Maven更可能成為您的選擇,Maven不僅提供了out-of-the-box的解決方案來統一處理建構相關的任務,還提供了資訊統計的功能。使您的開發團隊可以更好地跟蹤項目的進展情況。 

Maven的原理 

        作為建構工具,Maven和Ant一樣,利用建構配置檔案進行編譯,打包,測試等操作。您可以用Maven自帶的功能進行任何的操作,但前提是做好了相應的配置。當然,修改已有的模闆來開始新的項目是個好方法。除非您在寫特有的task,不然都會有target重用的問題。 

        Maven進行了一些改進。您将項目配置内容寫成XML檔案,并且可以使用很多Maven自帶的功能。另外還可以在Maven項目中調用任何Ant的task。 

        Maven自帶的 "goals "有以下功能: 

            編譯源代碼 

        産生Javadoc文檔 

        運作unit測試 

        源代碼文法分析 

        産生違反團隊編碼規範的詳細報告 

        産生CVS最新送出報告 

        産生CVS更改最頻繁的檔案報告和送出最頻繁的開發人員報告 

        産生可以交叉引用的HTML格式的源代碼,等等。 

Maven的功能是通過衆多的插件來實作的。在Maven的網站上可以找到一個Maven插件清單。例如,建立EAR包和控制J2EE應用伺服器的插件。 

        Maven的另外一個特色是利用中央建構資源庫去通路您項目中需要的.jars(像Perl 's   CPAN)。您隻用列出需要的.jars及相應版本,Maven會自動下載下傳。當第一次運作Maven,或者運作一個新的goal時,可以在控制台上看到中央建構資源庫下載下傳.jars的詳細過程。這一功能不僅使Maven更加容易使用,而且能幫您省下不少搜集維護本地或遠端建構資源庫中.jars版本的時間和精力。 

        Maven的易用性來源于配置過程的自然性。Out   of   the   box,不僅提供了項目建構的基本步驟,還可以自定義項目對象模型(POM)。POM基于易于編輯的XML格式,由不同元素的名稱和屬性組成。一旦您完成POM的配置,就可以在構造過程中使用很多Maven自帶的激動人心的功能。 

        Maven也易于自定義,特别是當您已經熟悉Ant後。您可以增加新的功能或鈎子到已有的構造過程以添加自定義的步驟。通過修改maven.xml檔案可以添加自定義的功能。