轉 :http://cc.msnscache.com/cache.aspx?q=5879089626553&lang=zh-CN&mkt=zh-CN&FORM=CVRE3
一直以來,沉浸的ant的成就中,我也沒有對項目資源的管理提出更高的要求,也許本身也是項目接觸的原因。罱捎詮駒謐蚴褂胮ortal技術,而且是用開源的jetspeed.我當時聽了一大跳,說那么大的企業(yè)級應用怎么能這么草率的選擇開源的東西(雖然我對開源這東西很喜歡)。沒有辦法了,領導命令下來,做兵的只能埋頭苦干了。一開始碰到的是項目的編譯問題。說jetspeed是基于maven描述的
。
?? 暈~!maven是什么東西,看來真的是孤陋寡聞了。以前一直是eclipse的平臺下開發(fā),加上ant工具,對項目的創(chuàng)建,開發(fā),發(fā)布,文檔生成都很方便。第一次聽到這東西很納悶,心里罵到,這群人是不是吃了沒事干啊。可是罵歸罵,事情還得做。老方法,第一步google,第二步找到官方站點。我才奇怪,apache每天都上怎么就沒有注意的這東東呢。咳,看來rimen我真的很懶了,懶得連舉手之勞的事情都不做了~。言歸正傳,從實際的項目出發(fā)。我的目的很簡單,就是能夠建立jetspeed項目,能夠讓他在eclipse進行開發(fā)。在我心里就有了如下的問題:
?1.maven是什么東西
?2.maven和ant由什么區(qū)別,maven和現有的IDE工具有什么關系
?3.maven的主要過程和原理
?4.怎么利用maven進行項目的開發(fā)和管理
?經過一天的努力,查詢了一些相關的資料,發(fā)現有價值的中文資料不多,最全的還是apache上的doc文檔。不過都是老外的文字,要知道我最痛恨的就是那些僅有線條沒有寓意的文字了。不過為了工作也為了自己,咳,沒有辦法了,重洋眉外一下了,大家不要罵我^_^。但是這里還是推薦一篇對初學者比較有價值的文章,matrix上的:http://www.matrix.org.cn/resource/article/43/43661_Maven.html 也是從英文翻譯過來的,咳,國人啊,加油啊~!
?開始解開那幾個問題了.
?第一個問題很簡單,它就是一個工具,僅僅是一個工具,至于什么工具下面問題就可以體現了。它的原始想法就是為了簡化jakarta螺旋式項目的構建,解決項目之間jar依賴的共享。往往偉大的發(fā)明都是來自于解決某些人的懶惰,看當初java就是,服了那些老外了,什么都想的出,我也很懶,我也發(fā)現在eclipse開發(fā)多個項目的時候管理jar之間的版本很麻煩,可是我就想不出這個東西,任命了。
?我相信大家只要開發(fā)過java程序的人,或多或少都會接觸到ant的東東,怎么說呢,ant其實只能說一個腳本解析器,它對任務的處理還得依賴于外部的工具。這就不得不想到makefile這東西了,在以前開發(fā)c程序的時候,為了管理c項目的各種資源包括原文件和類庫,對編譯工具提供了一個make工具。我個人覺得ant就是make的java版本,錯了莫怪。至于maven,那可不是一言兩語可以概括的。不過我們可以重程序和源碼中抽身出來,想象自己是個pm或者一個architecture來觀察一個項目或一個軟件產品。它提供很多的基礎構件,特別是對j2ee系統(tǒng),每個組件都可以看成一個宏觀上的資源。我們從軟件工廠的角度出發(fā),它里面保護了機器設備(external jars,tools,plugins ),生產原料(jar,src,config file,databse),產品(ear,war,jar,doc,config file 等)。下面我們要管理這些東西,叫一個人(老總)取管理,我看他在高的工資也不會干,因為他知道錢有命賺沒命花,同時也為了考慮可發(fā)展道路,他不會這么干的。所以在maven中引入了plugin的概念。這個plugin管理的東西是上面的說的構件,這樣我們必須就有一東西來記錄這些東西,不然它怎么知道這是不是它的管轄范圍,這就是通過project.xml文件進行定義,它是基于pom元數據結合xml技術進行描述。當然有了被管理的對象,工廠必須有其業(yè)務規(guī)則,不然它也運作不起來,這就是通過plugin.jelly進行定義,利用jelly腳步語言進行構建每一個管理的目標。這樣老總一句話(maven命令),加上目標名,他就會找到相應的plugin進行根據它定義的規(guī)則進行處理。這僅僅是從宏觀上的描述,真的的原理還必須參考相關的文檔進行。這里面提出幾個概念大家可以注意一下,maven plugin,jelly腳本,pom元數據,軟件工廠等。還有一點就是和目前流行的IDE工具例如eclipse,instillj,jbuider,netbeans IDE 等工具的關系。以eclipse為例,嚴格來說maven和eclipse應該是風馬牛不相及的東西,如果硬要把這個兩個東西來過來說的話,那也只是人為強加的因素。但是可以肯定的作為常用的軟件,如果說maven創(chuàng)建的項目,如果不能在eclipse中開發(fā),這可能就失去了這些工具的原來意義,這也許就是他們之間的唯一聯(lián)系。首先maven和eclipse對象項目資源描述元數據都是不同的,當然現在有mavenide(maven workshop)等工具來保證這些元數據之間的轉換和同步。其次eclispe和maven之間的功能和職責不同,maven基本上不用來進行源碼的開發(fā),這樣用eclipse和maven結合來開發(fā)確實可以減少很多工作量。
?3.maven的主要原理我想沒有比它doc上將的清楚。我想說的就一點,一開始我總用ant的觀點去理解它,總覺得少了很多東西。其實maven最大的成功在于簡化了面向過程的任務管理。你知道定義資源,maven用基于插件的目標方式來完成構建。當然你也可以想ant一樣定義自己特殊的目標,你也可以把自己項目的目標制作成通用的插件。
?4.maven的項目開發(fā),通過默認的模板新建一個maven項目.它會生成項目的各種資源和目錄,例如src,conf等.然后你可以通過maven的IDE插件生成相應的IDE項目,例如maven eclipse.
??????? 其實我也只是用它來編譯jetspeed.目前越來越多的項目基于maven的方式發(fā)布,我們可以通過maven的插件把它轉換成自己適應的IDE項目進行開發(fā).基于它對項目管理強大功能,對資源和項目版本管理的統(tǒng)一性,我相信會有越來越多人會選擇它來做項目管理工具,特別是團隊開發(fā).