當您的項目逐漸變得龐大和復雜時(shí),最好使用一種構建工具來(lái)自動(dòng)構建您的項目。例如,一個(gè)典型的java項目,每次構建時(shí)都要經(jīng)歷編譯java源代碼,把class文件打成.jar包,生成javadocs文檔等步驟。這些步驟都可以用構建工具幫您自動(dòng)完成。說(shuō)到構建工具,大家肯定都知道make,但make是依賴(lài)具體操作系統的。Java-centric選擇了Ant,一種可以跨平臺的使用xml來(lái)替換Makefile糟糕語(yǔ)法的構建工具。
來(lái)自Apache軟件組織的構建工具M(jìn)aven更可能成為您的選擇,Maven不僅提供了out-of-the-box的解決方案來(lái)統一處理構建相關(guān)的任務(wù),還提供了信息統計的功能。使您的開(kāi)發(fā)團隊可以更好地跟蹤項目的進(jìn)展情況。
Maven的原理作為構建工具,Maven和Ant一樣,利用構建配置文件進(jìn)行編譯,打包,測試等操作。您可以用Maven自帶的功能進(jìn)行任何的操作,但前提是做好了相應的配置。當然,修改已有的模板來(lái)開(kāi)始新的項目是個(gè)好方法。除非您在寫(xiě)特有的task,不然都會(huì )有target重用的問(wèn)題。
Maven進(jìn)行了一些改進(jìn)。您將項目配置內容寫(xiě)成XML文件,并且可以使用很多Maven自帶的功能。另外還可以在Maven項目中調用任何Ant的task。
Maven自帶的"goals"有以下功能:
編譯源代碼
產(chǎn)生Javadoc文檔
運行unit測試
源代碼文法分析
產(chǎn)生違反團隊編碼規范的詳細報告
產(chǎn)生CVS最新提交報告
產(chǎn)生CVS更改最頻繁的文件報告和提交最頻繁的開(kāi)發(fā)人員報告
產(chǎn)生可以交叉引用的HTML格式的源代碼,等等。
Maven的功能是通過(guò)眾多的插件來(lái)實(shí)現的。在Maven的網(wǎng)站上可以找到一個(gè)Maven插件列表。例如,創(chuàng )建EAR包和控制J2EE應用服務(wù)器的插件。
Maven的另外一個(gè)特色是利用中央構建資源庫去訪(fǎng)問(wèn)您項目中需要的.jars(像Perl‘s CPAN)。您只用列出需要的.jars及相應版本,Maven會(huì )自動(dòng)下載。當第一次運行Maven,或者運行一個(gè)新的goal時(shí),可以在控制臺上看到中央構建資源庫下載.jars的詳細過(guò)程。這一功能不僅使Maven更加容易使用,而且能幫您省下不少搜集維護本地或遠程構建資源庫中.jars版本的時(shí)間和精力。
Maven的易用性來(lái)源于配置過(guò)程的自然性。Out of the box,不僅提供了項目構建的基本步驟,還可以自定義項目對象模型(POM)。POM基于易于編輯的XML格式,由不同元素的名稱(chēng)和屬性組成。一旦您完成POM的配置,就可以在構造過(guò)程中使用很多Maven自帶的激動(dòng)人心的功能。
Maven也易于自定義,特別是當您已經(jīng)熟悉Ant后。您可以增加新的功能或鉤子到已有的構造過(guò)程以添加自定義的步驟。通過(guò)修改maven.xml文件可以添加自定義的功能。
Maven概述Maven最基本的運行單位是goal。例如,當您在控制臺運行如下命令:
maven site:generate
Maven會(huì )去訪(fǎng)問(wèn)并執行g(shù)enerate goal of site插件。如果想要查看配置文件中所有的goals,輸入:
maven -g
對于任何一個(gè)團隊,運行maven site:generate的goal生成的站點(diǎn)可以給團隊成員展示項目當前的狀態(tài)。第一頁(yè)是單元測試的報告,提供單元測試的技術(shù)統計結果。
Checkstyle插件對于在團隊中堅持編碼規范很有幫組。產(chǎn)生的報告中列出了在多少個(gè)文件里面出現了多少個(gè)違反編碼規范的統計信息,并列出了相應文件和行號。通過(guò)點(diǎn)擊相應鏈接,可以輕易的找到代碼中違反編碼規范的地方。
事實(shí)上,Maven的開(kāi)發(fā)者也在自己的項目中使用Maven來(lái)管理,所以你可以看到在開(kāi)發(fā)Maven過(guò)程中產(chǎn)生的Checkstyle報告,如圖一
圖一. Checkstyle報告摘要
在摘要之后就是按照文件為單位組織的違反編碼規范的報告,如圖二。
圖二. Checkstyle詳細報告
CVS插件可以產(chǎn)生關(guān)于代碼提交的統計報告,包括以下內容:
更改日志報告:列出最新提交的文件及提交日期,作者和注釋。
文件活躍度報告:提供更改最頻繁文件的詳細內容
開(kāi)發(fā)人員活躍度報告:提供最新提交文件的統計報告及每個(gè)開(kāi)發(fā)人員提交的文件數。
以上報告文檔同樣使用在Maven開(kāi)發(fā)項目中,最新的一次更改日志報告如圖三。
圖三. 更改日志報告
試一試如果您已經(jīng)準備好要使用Maven,下面是安裝的步驟.
到Apache下載Maven的最新版本.
解壓到系統的某個(gè)目錄,比如C:\maven或者~/maven.
設置MAVEN_HOME環(huán)境變量指向解壓到的目錄.
確認您已經(jīng)配置好JAVA_HOME環(huán)境變量.
在系統path環(huán)境變量中添加MAVEN_HOME/bin.
現在,在控制臺輸入
maven -v
您可以看到下面的輸出:
__ __
| \/ |__ _Apache__ ___
| |\/| / _` \ V / -_) ‘ \ ~ intelligent projects ~
|_| |_\__,_|\_/\___|_||_| v. 1.0-beta-10
Maven可以工作了!想看所有可用的Maven選項,輸入:
maven -h
所有可用的goals:
maven -g
您將看到可用的插件列表及其提供的goals:
Available [Plugins] / Goals
```````````````````````````
[ant] : Generate an Ant build file
generate-build ............. Generate an Ant
build file
[antlr] ( NO DEFAULT GOAL )
generate ................... Generate source
from antlr grammars
prepare-filesystem ......... Make any necessary
directories for antlr
processing
再往下,可以看到[wizard]插件和其goal ui。想運行那個(gè)goal就輸入:
maven wizard:ui
您可以在控制臺上看到Maven自動(dòng)到中央構建資源庫或網(wǎng)上下載需要的.jar包.
我們在進(jìn)一步,創(chuàng )建一個(gè)簡(jiǎn)單的項目。例如,創(chuàng )建一個(gè)名為maven-sample的目錄(~/maven-sample或者C:\maven-sample)。運行如下命令:
maven -D package=com.oreillynet.mavensample genapp
maven會(huì )自動(dòng)創(chuàng )建一個(gè)標準的項目文件。上面的package屬性是必須的,如果輸入錯誤或不輸會(huì )編譯錯誤。
現在,運行命令:
maven site:generate
Maven會(huì )依據配置好的POM文件(project.xml)為您項目生成相應的站點(diǎn)。如果是第一次運行,還可以看到Maven會(huì )到中央構建資源庫或網(wǎng)上下載必須的.jars包。
運行這個(gè)goal,Maven會(huì )為您編譯源代碼,拷貝conf目錄里的資源文件到類(lèi)文件classes的目錄,生成Javadoc文檔以及項目分析報告??梢钥吹?一個(gè)目標含有很多的功能!
進(jìn)入target目錄,您可以看到site:generate goal生成的文件。target目錄下的docs目錄存放著(zhù)Maven為您的項目產(chǎn)生的報告文檔。
Maven中使用Ant任務(wù)要整合Ant任務(wù)到Maven中,您需要創(chuàng )建名為maven.xml的文件并存放到project.xml文件的目錄。在maven.xml文件中寫(xiě)入:
<project default="myGoal">
<goal name="myGoal">
<echo>Hello Maven!</echo>
</goal>
</project>
其中
<echo>
是Ant中用于輸出的task。同樣,在自定義的goals中也可以運行任何Ant task。
保存maven.xml文件,在project.xml和maven.xml所在的目錄中運行
maven
您可以看到以下輸出:
myGoal:
[echo] Hello Maven!
BUILD SUCCESSFUL
Total time: 1 seconds
自定義Maven到目前為止,您已經(jīng)看到一個(gè)簡(jiǎn)單的項目是怎樣運行的,您還可以按需要自定義Maven。在您最喜歡文本編輯器中打開(kāi)project.xml文件,可以看到帶有注釋的項目文件。您可以把這作為擴展的基礎,根據項目的需要添加需要的代碼和資源。
如果要使用Checkstyle插件,需要在project.properties文件中指定使用的編碼規范。默認使用的是標準的Sun和Turbine的編碼規范。您也可以通過(guò)設置
maven.checkstyle.properties=team-checkstyle.xml
來(lái)使用團隊自己的編碼規范。
Checksytle插件會(huì )使用team-checkstyle.xml文件作為編碼規范檢查的依據。要創(chuàng )建自己的編碼規范文件,可以使用Eclipse插件,或者修改標準的編碼規范。解壓MAVEN_HOME/plugins目錄下的maven-checkstyle-plugin.jar文件,在解壓目錄中的plugin-resources目錄中可以找到sun_checks.xml和tuibine_checks.xml兩個(gè)文件。選擇和您團隊最接近的編碼規范再根據需要修改一下就可以了。
要更改項目產(chǎn)生的站點(diǎn)的默認顏色,可以在project.properites文件中修改。顏色屬性要用標準的HTML語(yǔ)法。
maven.ui.section.background=#cfcfbb
maven.ui.banner.border.top=#cfcfbb
maven.ui.banner.background=#cfcfbb
maven.ui.source.background=#cfcfbb
如果您想定義在ibiblio.org的Maven構建資源庫中沒(méi)有的公司自己的項目相關(guān)性,您可以照下面定義
<dependency>
<id>SomeJar</id>
<jar>someJar1.2.jar</jar>
</dependency>
然后,您需要將somJar1.2.jar文件放到您自己的中央構建資源庫目錄中。該目錄由project.properties文件中的maven.repo.local屬性指定。默認為${maven.home.local}/repository或${user.home}/.maven。在project.xml文件中添加下列<reports>元素還可以自定義生成的報告文檔
<reports>
<report>maven-checkstyle-plugin</report>
<report>maven-changelog-plugin</report>
<report>maven-developer-activity-plugin</report>
<report>maven-file-activity-plugin</report>
<report>maven-javadoc-plugin</report>
<report>maven-jdepend-plugin</report>
<report>maven-junit-report-plugin</report>
<report>maven-jxr-plugin</report>
<report>maven-statcvs-plugin</report>
<report>maven-simian-plugin</report>
</reports>
除了最后兩個(gè),其他都是默認配置的。maven-statcvs-plugin產(chǎn)生CVS統計報告,maven-simian-plugin可以識辨程序里重復的代碼。一旦您自己定義了一個(gè)
<reports>
元素,將會(huì )覆蓋掉所有默認文檔配置。
總結本文介紹了Maven的基本功能。用Maven來(lái)管理您的項目可以改善團隊開(kāi)發(fā)過(guò)程并可以讓您更好的了解當前項目的情況。
在此感謝Maven的開(kāi)發(fā)者及開(kāi)發(fā)社區的朋友,是他們創(chuàng )造出了這么卓越的構建工具!