|
最近有不少開發(fā)者向我反饋,現(xiàn)在做新的項(xiàng)目,需要用到maven工具,自己又沒有這方面的知識(shí),所以我將在這里分享一起maven相關(guān)的資料,供大家參考,希望能幫到有需要的朋友。Maven是什么我就不講了,大家可以到百度上去搜索。 現(xiàn)在生產(chǎn)環(huán)境上開發(fā)的項(xiàng)目,不再是一個(gè)項(xiàng)目一個(gè)工程,而是每個(gè)模塊創(chuàng)建一個(gè)工程,而多個(gè)模塊整合在一起就需要使用到像Maven這樣的構(gòu)建工具。 真的需要嗎? Maven是干什么用的?這是很多開發(fā)者在剛開始接觸Maven時(shí)最大的問題。之所以會(huì)提出這個(gè)問題,是因?yàn)榧词共皇褂肕aven 我們?nèi)匀豢梢赃M(jìn)行B/S結(jié)構(gòu)項(xiàng)目的開發(fā),從表現(xiàn)層,業(yè)務(wù)邏輯層到持久化層再到數(shù)據(jù)庫(kù)都有成熟的解決方案——不使用Maven我們一樣可以開發(fā)項(xiàng)目??? 這里給大家糾正一個(gè)誤區(qū),Maven并不是直接用來輔助編碼的,它戰(zhàn)斗的崗位并不是以上各層。所以我們有必要通過企業(yè)開發(fā)中的實(shí)際需求來看一看哪些方面是我們現(xiàn)有技術(shù)的不足。 1.2 究竟為什么? 為什么要使用Maven?它能幫助我們解決什么問題? ①添加第三方j(luò)ar包 在今天的JavaEE開發(fā)領(lǐng)域,有大量的第三方框架和工具可以供我們使用。要使用這些jar包最簡(jiǎn)單的方法就是復(fù)制粘貼到WEB-INF/lib目錄下。但是這會(huì)導(dǎo)致每次創(chuàng)建一個(gè)新的工程就需要將jar包重復(fù)復(fù)制到lib目錄下,從而造成工作區(qū)中存在大量重復(fù)的文件,讓我們的工程顯得很臃腫。 而使用Maven后每個(gè)jar包本身只在本地倉(cāng)庫(kù)中保存一份,需要jar包的工程只需要以坐標(biāo)的方式簡(jiǎn)單的引用一下就可以了。不僅極大的節(jié)約了存儲(chǔ)空間,讓項(xiàng)目更輕巧,更避免了重復(fù)文件太多而造成的混亂。 ②jar包之間的依賴關(guān)系 jar包往往不是孤立存在的,很多jar包都需要在其他jar包的支持下才能夠正常工作,我們稱之為jar包之間的依賴關(guān)系。最典型的例子是:commons-fileupload-1.3.jar依賴于commons-io-2.0.1.jar,如果沒有IO包,F(xiàn)ileUpload包就不能正常工作。相信很多開發(fā)著在沒有使用Maven前,為解決這些包沖突而頭痛。 那么問題來了,你知道你所使用的所有jar包的依賴關(guān)系嗎?當(dāng)你拿到一個(gè)新的從未使用過的jar包,你如何得知他需要哪些jar包的支持呢?如果不了解這個(gè)情況,導(dǎo)入的jar包不夠,那么現(xiàn)有的程序?qū)⒉荒苷9ぷ?。再進(jìn)一步,當(dāng)你的項(xiàng)目中需要用到上百個(gè)jar包時(shí),你還會(huì)人為的,手工的逐一確認(rèn)它們依賴的其他jar包嗎?這簡(jiǎn)直是不可想象的。 而引入Maven后,Maven就可以替我們自動(dòng)的將當(dāng)前jar包所依賴的其他所有jar包全部導(dǎo)入進(jìn)來,無需人工參與,節(jié)約了我們大量的時(shí)間和精力。用實(shí)際例子來說明就是:通過Maven導(dǎo)入commons-fileupload-1.3.jar后,commons-io-2.0.1.jar會(huì)被自動(dòng)導(dǎo)入,程序員不必了解這個(gè)依賴關(guān)系。 下圖是Spring所需jar包的部分依賴關(guān)系 ③獲取第三方j(luò)ar包 JavaEE開發(fā)中需要使用到的jar包種類繁多,幾乎每個(gè)jar包在其本身的官網(wǎng)上的獲取方式都不盡相同。為了查找一個(gè)jar包找遍互聯(lián)網(wǎng),身心俱疲,沒有經(jīng)歷過的人或許體會(huì)不到這種折磨。不僅如此,費(fèi)勁心血找的jar包里有的時(shí)候并沒有你需要的那個(gè)類,又或者又同名的類沒有你要的方法——以不規(guī)范的方式獲取的jar包也往往是不規(guī)范的。 使用Maven我們可以享受到一個(gè)完全統(tǒng)一規(guī)范的jar包管理體系。你只需要在你的項(xiàng)目中以坐標(biāo)的方式依賴一個(gè)jar包,Maven就會(huì)自動(dòng)從中央倉(cāng)庫(kù)進(jìn)行下載,并同時(shí)下載這個(gè)jar包所依賴的其他jar包 ——規(guī)范、完整、準(zhǔn)確!一次性解決所有問題! Tips:在這里我們順便說一下,統(tǒng)一的規(guī)范幾乎可以說成是程序員的最高信仰。如果沒有統(tǒng)一的規(guī)范,就意味著每個(gè)具體的技術(shù)都各自為政,需要以諸多不同的特殊的方式加入到項(xiàng)目中;好不容易加入進(jìn)來還會(huì)和其他技術(shù)格格不入,最終受苦的是我們。而任何一個(gè)領(lǐng)域的統(tǒng)一規(guī)范都能夠極大的降低程序員的工作難度,減少工作量。例如:USB接口可以外接各種設(shè)備,如果每個(gè)設(shè)備都有自己獨(dú)特的接口,那么不僅制造商需要維護(hù)各個(gè)接口的設(shè)計(jì)方案,使用者也需要詳細(xì)了解每個(gè)設(shè)備對(duì)應(yīng)的接口,無疑是非常繁瑣的。 ④將項(xiàng)目拆分成多個(gè)工程模塊 隨著JavaEE項(xiàng)目的規(guī)模越來越龐大,開發(fā)團(tuán)隊(duì)的規(guī)模也與日俱增。一個(gè)項(xiàng)目上千人的團(tuán)隊(duì)持續(xù)開發(fā)很多年對(duì)于JavaEE項(xiàng)目來說再正常不過。那么我們想象一下:幾百上千的人開發(fā)的項(xiàng)目是同一個(gè)Web工程。那么架構(gòu)師、項(xiàng)目經(jīng)理該如何劃分項(xiàng)目的模塊、如何分工呢?這么大的項(xiàng)目已經(jīng)不可能通過package結(jié)構(gòu)來劃分模塊,必須將項(xiàng)目拆分成多個(gè)工程協(xié)同開發(fā)。多個(gè)模塊工程中有的是Java工程,有的是Web工程。 那么工程拆分后又如何進(jìn)行互相調(diào)用和訪問呢?這就需要用到Maven的依賴管理機(jī)制。大家請(qǐng)看我們的Survey調(diào)查項(xiàng)目拆分的情況: 上層模塊依賴下層,所以下層模塊中定義的API都可以為上層所調(diào)用和訪問。 |
|
|