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