黑猴子的家:為什么使用 Maven 撮胧? ②

1桨踪、為什么使用Maven ?

Maven是干什么用的?這是很多同學(xué)在學(xué)完這個課程后最大的問題芹啥。之所以會提出這個問題锻离,是因為即使不使用Maven我們?nèi)匀豢梢赃M(jìn)行B/S結(jié)構(gòu)項目的開發(fā)。從表述層墓怀、業(yè)務(wù)邏輯層到持久化層再到數(shù)據(jù)庫都有成熟的解決方案——不使用Maven我們一樣可以開發(fā)項目捌馈?所以我們有必要通過企業(yè)開發(fā)中的實際需求來看一看哪些方面是我們現(xiàn)有技術(shù)的不足捺疼。

2疏虫、添加第三方j(luò)ar包

在今天的JavaEE開發(fā)領(lǐng)域,有大量的第三方框架和工具可以供我們使用啤呼。要使用這些jar包最簡單的方法就是復(fù)制粘貼到WEB-INF目錄下的lib目錄下卧秘。但是這會導(dǎo)致每次創(chuàng)建一個新的工程就需要將jar包重復(fù)復(fù)制到lib目錄下,從而造成工作區(qū)中存在大量重復(fù)的文件官扣。

而使用Maven后每個jar包只在本地倉庫中保存一份翅敌,需要jar包的工程只需要維護(hù)一個文本形式的jar包的引用——我們稱之為“坐標(biāo)”。不僅極大的節(jié)約了存儲空間惕蹄,讓項目更輕巧蚯涮,更避免了重復(fù)文件太多而造成的混亂。

3卖陵、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包就不能正常工作撩荣。

那么問題來了铣揉,你知道你所使用的所有jar包的依賴關(guān)系嗎饶深?當(dāng)你拿到一個新的從未使用過的jar包,你如何得知他需要哪些jar包的支持呢逛拱?如果不了解這個情況敌厘,導(dǎo)入的jar包不夠,那么現(xiàn)有的程序?qū)⒉荒苷9ぷ餍嗪稀T龠M(jìn)一步俱两,當(dāng)你的項目中需要用到上百個jar包時,你還會人為的旁舰,手工的逐一確認(rèn)它們依賴的其他jar包嗎锋华?這簡直是不可想象的嗡官。

而引入Maven后箭窜,Maven就可以替我們自動的將當(dāng)前jar包所依賴的其他所有jar包全部導(dǎo)入進(jìn)來,無需人工參與衍腥,節(jié)約了我們大量的時間和精力磺樱。用實際例子來說明就是:通過Maven導(dǎo)入commons-fileupload-1.3.jar后,commons-io-2.0.1.jar會被自動導(dǎo)入婆咸,程序員不必了解這個依賴關(guān)系竹捉。

4、處理jar包之間的沖突

上一點說的是jar包不足項目無法正常工作尚骄,但其實有的時候jar包多了項目仍然無法正常工作块差,這就是jar包之間的沖突。

舉個例子:我們現(xiàn)在有三個工程MakeFriend倔丈、HelloFriend憨闰、和Hello。MakeFriend依賴HelloFriend需五,HelloFriend依賴Hello鹉动。而Hello依賴log4j.1.2.17.jar,HelloFriend依賴log4j.1.2.14.jar宏邮。如下圖所示:

那么MakeFriend工程的運(yùn)行時環(huán)境中該導(dǎo)入log4j.1.2.14.jar呢還是log4j.1.2.17.jar呢泽示?
這樣的問題一個兩個還可以手工解決,但如果系統(tǒng)中存在幾十上百的jar包蜜氨,他們之間的依賴關(guān)系會非常復(fù)雜械筛,幾乎不可能手工實現(xiàn)依賴關(guān)系的梳理。
使用Maven就可以自動的處理jar包之間的沖突問題飒炎。因為Maven中內(nèi)置了兩條依賴原則:最短路徑者優(yōu)先和先聲明者優(yōu)先埋哟,上述問題MakeFriend工程會自動使用log4j.1.2.14.jar。

5厌丑、獲取第三方j(luò)ar包

JavaEE開發(fā)中需要使用到的jar包種類繁多定欧,幾乎每個jar包在其本身的官網(wǎng)上的獲取方式都不盡相同渔呵。為了查找一個jar包找遍互聯(lián)網(wǎng),身心俱疲砍鸠,沒有經(jīng)歷過的人或許體會不到這種折磨扩氢。不僅如此,費(fèi)勁心血找的jar包里有的時候并沒有你需要的那個類爷辱,又或者又同名的類沒有你要的方法——以不規(guī)范的方式獲取的jar包也往往是不規(guī)范的录豺。

使用Maven我們可以享受到一個完全統(tǒng)一規(guī)范的jar包管理體系。你只需要在你的項目中以坐標(biāo)的方式依賴一個jar包饭弓,Maven就會自動從中央倉庫進(jìn)行下載双饥,并同時下載這個jar包所依賴的其他jar包——規(guī)范、完整弟断、準(zhǔn)確咏花!一次性解決所有問題!

Tips:在這里我們順便說一下阀趴,統(tǒng)一的規(guī)范幾乎可以說成是程序員的最高信仰昏翰。如果沒有統(tǒng)一的規(guī)范,就意味著每個具體的技術(shù)都各自為政刘急,需要以諸多不同的特殊的方式加入到項目中棚菊;好不容易加入進(jìn)來還會和其他技術(shù)格格不入,最終受苦的是我們叔汁。而任何一個領(lǐng)域的統(tǒng)一規(guī)范都能夠極大的降低程序員的工作難度统求,減少工作量。例如:USB接口可以外接各種設(shè)備据块,如果每個設(shè)備都有自己獨(dú)特的接口码邻,那么不僅制造商需要維護(hù)各個接口的設(shè)計方案,使用者也需要詳細(xì)了解每個設(shè)備對應(yīng)的接口瑰钮,無疑是非常繁瑣的冒滩。

6、將項目拆分成多個工程模塊

隨著JavaEE項目的規(guī)模越來越龐大浪谴,開發(fā)團(tuán)隊的規(guī)模也與日俱增开睡。一個項目上千人的團(tuán)隊持續(xù)開發(fā)很多年對于JavaEE項目來說再正常不過。那么我們想象一下:幾百上千的人開發(fā)的項目是同一個Web工程苟耻。那么架構(gòu)師篇恒、項目經(jīng)理該如何劃分項目的模塊、如何分工呢凶杖?這么大的項目已經(jīng)不可能通過package結(jié)構(gòu)來劃分模塊胁艰,必須將項目拆分成多個工程協(xié)同開發(fā)。多個模塊工程中有的是Java工程,有的是Web工程腾么。

那么工程拆分后又如何進(jìn)行互相調(diào)用和訪問呢奈梳?這就需要用到Maven的依賴管理機(jī)制。大家請看我們的Survey調(diào)查項目拆分的情況


上層模塊依賴下層解虱,所以下層模塊中定義的API都可以為上層所調(diào)用和訪問攘须。

7、實現(xiàn)項目的分布式部署

在實際生產(chǎn)環(huán)境中殴泰,項目規(guī)模增加到一定程度后于宙,可能每個模塊都需要運(yùn)行在獨(dú)立的服務(wù)器上,我們稱之為分布式部署悍汛,這里同樣需要用到Maven捞魁。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市离咐,隨后出現(xiàn)的幾起案子谱俭,更是在濱河造成了極大的恐慌,老刑警劉巖健霹,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旺上,死亡現(xiàn)場離奇詭異,居然都是意外死亡糖埋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門窃这,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞳别,“玉大人,你說我怎么就攤上這事杭攻∷盍玻” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵兆解,是天一觀的道長馆铁。 經(jīng)常有香客問我,道長锅睛,這世上最難降的妖魔是什么埠巨? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮现拒,結(jié)果婚禮上辣垒,老公的妹妹穿的比我還像新娘。我一直安慰自己印蔬,他們只是感情好勋桶,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般例驹。 火紅的嫁衣襯著肌膚如雪捐韩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天鹃锈,我揣著相機(jī)與錄音奥帘,去河邊找鬼。 笑死仪召,一個胖子當(dāng)著我的面吹牛寨蹋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扔茅,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼已旧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了召娜?” 一聲冷哼從身側(cè)響起运褪,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎玖瘸,沒想到半個月后秸讹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雅倒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年璃诀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔑匣。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡劣欢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出裁良,到底是詐尸還是另有隱情凿将,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布价脾,位于F島的核電站牧抵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏侨把。R本人自食惡果不足惜犀变,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望座硕。 院中可真熱鬧弛作,春花似錦、人聲如沸华匾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至萨西,卻和暖如春有鹿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谎脯。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工葱跋, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人源梭。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓娱俺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親废麻。 傳聞我的和親對象是個殘疾皇子荠卷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容