為什么要使用 Maven?它能幫助我們解決什么問(wèn)題?
1、添加第三方 jar 包
??在今天的 JavaEE 開(kāi)發(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ù)文件太多而造成的混亂。
2、jar 包之間的依賴關(guān)系
??jar 包往往不是孤立存在的,很多 jar 包都需要在其他 jar 包的支持下才能夠正常工作,我們稱之為jar 包之間的依賴關(guān)系。最典型的例子是:commons-fileupload-1.3.jar 依賴于 commons-io-2.0.1.jar,如果沒(méi)有 IO 包,F(xiàn)ileUpload 包就不能正常工作。
??那么問(wèn)題來(lái)了,你知道你所使用的所有 jar 包的依賴關(guān)系嗎?當(dāng)你拿到一個(gè)新的從未使用過(guò)的 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)來(lái),無(wú)需人工參與,節(jié)約了我們大量的時(shí)間和精力。用實(shí)際例子來(lái)說(shuō)明就是:通過(guò) Maven 導(dǎo)入commons-fileupload-1.3.jar 后,commons-io-2.0.1.jar 會(huì)被自動(dòng)導(dǎo)入,程序員不必了解這個(gè)依賴關(guān)系。
3、獲取第三方 jar 包
??JavaEE 開(kāi)發(fā)中需要使用到的 jar 包種類(lèi)繁多,幾乎每個(gè) jar 包在其本身的官網(wǎng)上的獲取方式都不盡相同。為了查找一個(gè) jar 包找遍互聯(lián)網(wǎng),身心俱疲,沒(méi)有經(jīng)歷過(guò)的人或許體會(huì)不到這種折磨。不僅如此,費(fèi)勁心血找的 jar 包里有的時(shí)候并沒(méi)有你需要的那個(gè)類(lèi),或者同名的類(lèi)沒(méi)有你要的方法——以不規(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)確!一次性解決所有問(wèn)題!
4、將項(xiàng)目拆分成多個(gè)工程模塊
??隨著 JavaEE 項(xiàng)目的規(guī)模越來(lái)越龐大,開(kāi)發(fā)團(tuán)隊(duì)的規(guī)模也與日俱增。一個(gè)項(xiàng)目上千人的團(tuán)隊(duì)持續(xù)開(kāi)發(fā)很多年對(duì)于 JavaEE 項(xiàng)目來(lái)說(shuō)再正常不過(guò)。那么我們想象一下:幾百上千的人開(kāi)發(fā)的項(xiàng)目是同一個(gè) Web工程。那么架構(gòu)師、項(xiàng)目經(jīng)理該如何劃分項(xiàng)目的模塊、如何分工呢?這么大的項(xiàng)目已經(jīng)不可能通過(guò)package 結(jié)構(gòu)來(lái)劃分模塊,必須將項(xiàng)目拆分成多個(gè)工程協(xié)同開(kāi)發(fā)。多個(gè)模塊工程中有的是 Java 工程,有的是 Web 工程。那么工程拆分后又如何進(jìn)行互相調(diào)用和訪問(wèn)呢?
??這就需要用到 Maven 的依賴管理機(jī)制。下面是一個(gè)單獨(dú)的大項(xiàng)目拆分成多個(gè)工程之后的架構(gòu)。

??上層模塊依賴下層,所以下層模塊中定義的 API 都可以為上層所調(diào)用和訪問(wèn)。所以借助于Maven就可以將一個(gè)項(xiàng)目拆分成多個(gè)工程。
??這就是Maven能為我們解決的問(wèn)題,可以配合我Maven的第一篇介紹,綜合整體的看一下,會(huì)有對(duì)Maven有更好的理解。