在Java
世界中我們很多的開發(fā)人員選擇用Ant
來構(gòu)建項(xiàng)目,一個(gè)build.xml
能夠完成編譯、測(cè)試、打包、部署等很多任務(wù),但我們也碰到了很多的問題,如jar
文件管理混亂,各個(gè)項(xiàng)目結(jié)構(gòu)和build.xml
相差很大等等。而Maven
的出現(xiàn),給項(xiàng)目提供了更多的支持。
1
???????
簡介
Maven作為Apache的一個(gè)開源項(xiàng)目,旨在給項(xiàng)目管理提供更多的支持,主頁地址為
http://maven.apache.org
。它最早的意圖只是為了給apache組織的幾個(gè)項(xiàng)目提供統(tǒng)一的開發(fā)、測(cè)試、打包和部署,能讓開發(fā)者在多個(gè)項(xiàng)目中方便的切換。很多偉大的事業(yè),出發(fā)點(diǎn)都很簡單,ebay就是很好的例證。而maven的成功又一次驗(yàn)證了這一點(diǎn),越來越多的項(xiàng)目開始使用maven。
基本原理
Maven的基本原理很簡單,采用遠(yuǎn)程倉庫和本地倉庫以及一個(gè)類似build.xml的pom.xml,將pom.xml中定義的jar文件從遠(yuǎn)程倉庫下 載到本地倉庫,各個(gè)應(yīng)用使用同一個(gè)本地倉庫的jar,同一個(gè)版本的jar只需下載一次,而且避免每個(gè)應(yīng)用都去拷貝jar。如圖1。同時(shí)它采用了現(xiàn)在流行的 插件體系架構(gòu),只保留最小的核心,其余功能都通過插件的形式提供,所以maven下載很小(1.1M),在執(zhí)行maven任務(wù)時(shí),才會(huì)自動(dòng)下載需要的插 件。
這個(gè)基本原理與Pear――PHP擴(kuò)展與應(yīng)用庫(the PHP Extension and Application Repository)的原理非常相似,都有一個(gè)官方的倉庫,都是微內(nèi)核,通過網(wǎng)絡(luò)將需要的文件下載到本地,通過官方倉庫將相應(yīng)的類庫進(jìn)行統(tǒng)一管理。Pear已經(jīng)成為PHP開發(fā)事實(shí)上的標(biāo)準(zhǔn),而Maven在Java世界的地位也逐漸加強(qiáng),成為標(biāo)準(zhǔn)指日可待。
另外由于插件的易開發(fā)性,現(xiàn)在有了非常多的可供選擇的插件,如與eclipse結(jié)合的插件,與test相關(guān)的插件,后面我們結(jié)合maven在項(xiàng)目中的使用進(jìn)行詳細(xì)介紹。
圖1
2
???????
項(xiàng)目管理
Maven官方把maven定義為一個(gè)項(xiàng)目管理工具,我們不妨看看maven能給我們的項(xiàng)目提供哪些好的支持。
2.1
??????
項(xiàng)目標(biāo)準(zhǔn)化
Maven一個(gè)重要特性是定義了項(xiàng)目的標(biāo)準(zhǔn)模板,官方說法是最佳實(shí)踐。可以通過命令:
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
創(chuàng) 建一個(gè)單一的maven項(xiàng)目。創(chuàng)建好的項(xiàng)目,具有了特定的項(xiàng)目結(jié)構(gòu)。這個(gè)項(xiàng)目結(jié)構(gòu)是參考業(yè)界的最佳實(shí)踐而成,為后面使用統(tǒng)一的maven命令打下了基礎(chǔ), 如測(cè)試mvn test、打包mvn package等,無需寫一行腳本,就可以方便的實(shí)現(xiàn)眾多功能。Maven還提供其它一些類型模板,可以通過添加 -DarchetypeArtifactId={type}創(chuàng)建,如-DarchetypeArtifactId=maven-archetype- site,生成site類型的項(xiàng)目。
同時(shí)一些好的開源軟件使用了maven,也能作為很好的項(xiàng)目模板,如Equinox(Appfuse的簡化版),它的pom定義了對(duì)hiberante,spring…的依賴,可以通過ant new -Dapp.name=NAME快速生成項(xiàng)目原型,然后對(duì)pom文件進(jìn)行裁減,以符合自身項(xiàng)目的需要。
有了這個(gè)標(biāo)準(zhǔn),項(xiàng)目間能方便的進(jìn)行交流,你也很容易了解其它使用maven項(xiàng)目的結(jié)構(gòu)。對(duì)于企業(yè)來說,引入maven就自然引入了規(guī)范,這可比費(fèi)時(shí)費(fèi)力的寫文檔,定規(guī)范有效的多了。
2.2
??????
文檔和報(bào)告
使用mvn site可以快速生成項(xiàng)目站點(diǎn),apache很多開源項(xiàng)目站點(diǎn)都采用maven生成,會(huì)出現(xiàn)built by maven字樣的圖標(biāo)。
而maven提供的針對(duì)如junit,checkstyle,pmd等的插件,能夠方便的進(jìn)行測(cè)試和檢查并能直接生成報(bào)告。使用都很簡單,如mvn
surefire-report:report
就能自動(dòng)進(jìn)行junit測(cè)試,并生成junit報(bào)告,mvn pmd:pmd生成pmd報(bào)告。具體使用可以在
http://maven.apache.org/plugins/index.html
找到。
2.3
??????
類庫管理
Maven一個(gè)很重要的特色就是類庫管理。通過在pom.xml中定義jar包版本和依賴,能夠方便的管理jar文件。以下是一個(gè)簡單的jar定義片斷:
<dependency>
??????????????????????????????????????????????????????????????????????
????? <groupId>org.hibernate</groupId>
????? <artifactId>hibernate</artifactId>
????? <version>3.1</version>
????? <type>jar</type>
????? <scope>runtime</scope>
?</dependency>
|
這個(gè)片斷告訴我們,依賴的jar包groupId為org.hibernate,artifactId為hibernate,版本為3.1,scope為runtime。在實(shí)際項(xiàng)目中,會(huì)將M2_REPO
(maven
本地倉庫地址
)/ org/hibernate / hibernate /3.1/ hibernate -3.1.jar放入classpath。
同時(shí)maven會(huì)通過pom.xml管理jar包間的依賴。比如上面的hibernate-3.1.jar同級(jí)目錄肯定會(huì)有一個(gè)hibernate -3.1.pom,在這個(gè)pom文件中指定了這個(gè)jar對(duì)其它一些jar的依賴。而這個(gè)pom文件是遠(yuǎn)程倉庫提供,無需進(jìn)行修改,執(zhí)行maven相關(guān)命令 就會(huì)自動(dòng)根據(jù)相關(guān)依賴去下載jar包。這樣只需定義對(duì)hibernate的依賴而無需關(guān)心相關(guān)jar,在構(gòu)建項(xiàng)目上方便了很多。
因?yàn)閜om文件對(duì)jar的管理,也產(chǎn)生了一個(gè)很吸引人的特性:
項(xiàng)目文件很小
。以往一個(gè)web項(xiàng)目中,jar文件都要放入WEB-INF/lib下,并放入cvs(svn)中,很容易就達(dá)到幾十M。而通過maven,只需一個(gè)pom.xml,在執(zhí)行mvn eclipse:eclipse時(shí)再去遠(yuǎn)程倉庫下載,項(xiàng)目文件一般只需幾百K。
2.4
??????
發(fā)布管理
使用maven可以方便的進(jìn)行項(xiàng)目發(fā)表管理。在項(xiàng)目開發(fā)到一定階段,可以使用mvn package打包,它會(huì)自動(dòng)先運(yùn)行mvn test,跑所有的testcase,只有全部通過才能正確打包。生成的war包(如果項(xiàng)目的packaging為war)在target目錄下。這個(gè)war包與使用ant腳本生成一樣,但無需一行腳本,這也是maven對(duì)比ant的優(yōu)勢(shì)之一。使用mvn install將編譯和打包好的文件發(fā)布到distributionManager指定的遠(yuǎn)程repository。使用mvn deploy可以自動(dòng)管理項(xiàng)目版本。
?
3
???????
使用
maven
Maven使用簡單,插件豐富且經(jīng)過大量項(xiàng)目考驗(yàn),在項(xiàng)目中引入的風(fēng)險(xiǎn)很小。筆者在項(xiàng)目中使用maven,新進(jìn)員工在半小時(shí)內(nèi)就能成功使用maven構(gòu)建 項(xiàng)目,并很快掌握幾個(gè)常用的命令。Maven也不需要什么特殊的設(shè)施。如果項(xiàng)目全部使用開源軟件,并且不需要maven管理項(xiàng)目版本,只需要一個(gè)SCM環(huán) 境(CVS或SVN),共享開發(fā)源碼就可以。把pom.xml中的repository設(shè)為官方地址就行,配置如下:
<repository>
????? <id>central</id>
????? <url>http://www.ibiblio.org/maven2</url>
</repository>
|
這個(gè)官方remote repository上有非常多的開源軟件,應(yīng)該能滿足大部分項(xiàng)目的需要。如果有項(xiàng)目需要而它上面暫時(shí)還沒有的軟件,或者希望使用公司內(nèi)部的軟件,那么就需要自己配置一個(gè)repository了。
3.1
??????
自建私服
傳奇私服大家應(yīng)該都聽過,一個(gè)網(wǎng)吧自己搞個(gè)私服,一伙人免費(fèi)在上面砍殺。官方因此少賺了很多錢,因此總想打擊。而maven官方卻對(duì)自建私服很是支持,我 們總算可以正正當(dāng)當(dāng)搞把私服了(Springside的老大江南白衣就是創(chuàng)建私服的好手)。我們就來介紹下自建私服的最快方法。
首先需要一個(gè)http server,找臺(tái)服務(wù)器裝上apache就行。放一個(gè)空的maven目錄到htdocs下,假設(shè)服務(wù)器ip為192.168.0.1,確認(rèn)能用
http://192.168.0.1/maven
訪問到。然后在自己機(jī)器上裝好maven2,初始化好項(xiàng)目,在pom.xml放入需要的jar定義,運(yùn)行如mvn eclipse:eclipse就自動(dòng)從官方下載jar到本地,如果不做配置,默認(rèn)本地repository為${user.home}/.m2/。對(duì)于windows xp來說一般在C:\Documents and Settings\%username%\.m2下,其中%username%為操作系統(tǒng)登錄用戶名。這時(shí)你可以看到${user.home}/.m2/下多了個(gè)repository目錄,里面有很多的項(xiàng)目相關(guān)jar,目錄按groupId/ artifactId/version排好。把repository目錄整個(gè)拷貝到apache服務(wù)器的maven目錄下,如果需要官方缺少的jar或公司內(nèi)部jar,仿照這個(gè)目錄結(jié)構(gòu),做好jar放到maven目錄下。自建私服成功!
要使用私服,只需修改pom.xml,在repository配置后加上:
<repository>
????? <id>companyName</id>
????? <url>http:// ${ip}/maven</url>
</repository>
|
這樣需要下載jar時(shí),會(huì)先到本地repository查看,沒有下載過再到官方搜索,沒有找到再到后面的repository查找。
3.2
??????
安裝配置
Maven的安裝很簡單:
1.
????????
從apache網(wǎng)站上下載maven安裝包,實(shí)際上就是個(gè)壓縮文件。將其解壓到你想要存放maven的目錄中。在這里假設(shè)你將maven解壓到
C:\Program Files\Apache Software Foundation\maven-2.0.4
中。
2.
?????
將
C:\Program Files\Apache Software Foundation\maven-2.0.4\bin
設(shè)到你的系統(tǒng)環(huán)境變量
%PATH%
中。
3.
?????
同時(shí)確保你已經(jīng)將你的
JDK
安裝目錄設(shè)為
java_home
系統(tǒng)變量。
4.
????????
打開個(gè)命令行窗口,運(yùn)行mvn –version驗(yàn)證是否安裝成功。
5.
????????
如果使用eclipse,在運(yùn)行mvn eclipse:eclipse生成eclipse項(xiàng)目文件后,需加入M2_REPO到Classpath Variables中,指向本地repository,例如:C:/Documents and Settings/Owner/.m2/repository。
3.3
??????
基本使用流程
在項(xiàng)目進(jìn)程中,不必做什么配置,在pom.xml同級(jí)目錄,cmd使用簡單的maven命令,就可以完成
初始化
->
開發(fā)->
測(cè)試->
發(fā)布
的全過程。Maven的基本使用流程如下圖:
?
其中在初次使用命令mvn eclipse:eclipse時(shí)會(huì)下載很多的插件和jar,可能需要較長的時(shí)間,建議泡杯咖啡,和同事吹吹牛。如果失敗,可能是網(wǎng)絡(luò)問題,可以重新運(yùn)行mvn eclipse:eclipse,已下載好的插件和jar不會(huì)再下。運(yùn)行mvn test和mvn package等命令,產(chǎn)出物都會(huì)放在target目錄下。如果在使用過程中有什么問題,也可以和我聯(lián)系,mail:pesome@gmail.com,我們一起來嘗試解決。
?
總結(jié):
Maven作為新的項(xiàng)目管理工具,簡單易用,能對(duì)項(xiàng)目的各個(gè)階段提供大力支持,同時(shí)由于它易擴(kuò)展的插件體系架構(gòu),出現(xiàn)了越來越多的插件,也使得其功能更加 強(qiáng)大。短短一篇文章,實(shí)在很難把其特點(diǎn)一一盡述,maven還有很多好用的功能和插件等待我們?nèi)ナ褂煤烷_發(fā)。而學(xué)習(xí)新技術(shù)的最好方式就是實(shí)踐,大家如果有 興趣,盡快下載一個(gè)最新版,開始你的maven之旅吧!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
