Maven
1. 什麼是Maven?
乍一看,Maven看起來很多東西,但簡而言之,Maven試圖將模式應用於專案的構建基礎架構,以便通過提供使用最佳實踐的明確路徑來提高理解力和生產力。Maven本質上是一個專案管理和理解工具,因此提供了一種幫助管理的方法:
-
構建
-
文件
-
報告
-
依賴
-
供應鏈管理系統
-
釋出
-
分配
2.Maven的哲學
Maven通常被許多人認為是構建工具。很多來到Maven的人最初都熟悉Ant,所以它是一個自然的聯想,但Maven不僅僅是一個構建工具,而不僅僅是Ant的替代品。Maven與Ant完全不同。Ant只是一個工具箱,而Maven則是關於模式的應用,以實現顯示可見性,可重用性,可維護性和可理解性的基礎結構。
如果沒有這些特徵,多個人將很有可能在專案上一起高效地工作。沒有可見性,個人不太可能知道另一個人已經完成了什麼,因此很有可能有用的程式碼不會被重用。如果不重用程式碼,則很難建立可維護的系統。當每個人都在不斷努力尋找構成專案的所有這些不同點點的地方時,任何人都很難理解整個專案。因此,您最終會遇到孤島效應,共享知識的衰退以及團隊成員之間相應程度的挫折感。當流程對每個人都不以相同的方式工作時,這是一種自然的影響。
Maven誕生於非常實際的願望,即以相同的方式在Apache工作。因此,開發人員可以在這些專案之間自由移動,通過了解其中一個專案的工作方式,清楚地瞭解它們的工作原 如果開發人員花時間瞭解一個專案是如何構建它的,那麼當他們轉移到下一個專案時,他們就不必再次經歷這個過程。同樣的想法擴充套件到測試,生成文件,生成指標和報告,測試和部署。所有專案都具有足夠的相同特徵,瞭解Maven試圖利用其一般的專案管理方法。在很高的層面上,所有專案都需要構建,測試,打包,記錄和部署。當然,上述每個步驟都有無限的變化,但是這種變化仍然發生在明確定義的路徑的範圍內,而Maven試圖以明確的方式向每個人呈現這條路徑。明確路徑的最簡單方法是為人們提供一組模式,這些模式可以由專案中的任何人共享。
拉爾夫·約翰遜和唐·羅伯茨在“進化框架模式”中最喜歡的一句話:
人們通過從具體例子中概括出來來發展抽象。在沒有實際開發執行系統的情況下,每次嘗試在紙上確定正確的抽象都是註定要失敗的。沒有人那麼聰明。框架是一種可重用的設計,因此您可以通過檢視它應該是設計的東西來開發它。您看到的示例越多,您的框架就越通用。
我真的不知道最終的結果是什麼樣的,我只知道必須有更好的方法。但首先我知道我想:
-
專案的模型,以便您可以在一個地方查詢與專案相關的所有內容
-
一個標準的目錄結構,所以你不必去尋找圖書館,資源和文件
其實上面的都是官方語言,對我這種理解能力不強的人其實舉例子更合適
假如你正在Eclipse下開發兩個Java專案,姑且把它們稱為A、B,其中A專案中的一些功能依賴於B專案中的某些類,那麼如何維繫這種依賴關係的呢?
很簡單,這不就是跟我們之前寫程式時一樣嗎,需要用哪個專案中的哪些類,也就是用別人寫好了的功能程式碼,匯入jar包即可。所以這裡也如此,可以將B專案打成jar包,然後在A專案的Library下匯入B的jar檔案,這樣,A專案就可以呼叫B專案中的某些類了。
這樣做幾種缺陷,如果在開發過程中,發現B中的bug,則必須將B專案修改好,並重新將B打包並對A專案進行重編譯操作,在完成A專案的開發後,為了保證A的正常執行,就需要依賴B(就像在使用某個jar包時必須依賴另外一個jar一樣),兩種解決方案,第一種,選擇將B打包入A中,第二種,將B也釋出出去,等別人需要用A時,告訴開發者,想要用A就必須在匯入Bjar包。兩個都很麻煩,前者可能造成資源的浪費(比如,開發者可能正在開發依賴B的其它專案,B已經儲存到本地了,在匯入A的jar包的話,就有了兩個B的jar),後者是我們常遇到的,找各種jar包,非常麻煩(有了maven就不一樣了)
我們開發一個專案,或者做一個小demo,比如用SSH框架,那麼我們就必須將SSH框架所用的幾十個依賴的jar包依次找出來並手動匯入,超級繁瑣。
上面兩個問題的描述,其實都屬於專案與專案之間依賴的問題[A專案使用SSH的所有jar,就說A專案依賴SSH],人為手動的去解決,很繁瑣,也不方便,所以使用maven來幫我們管理
Maven的核心功能便是合理敘述專案間的依賴關係,通俗點講,就是通過pom.xml檔案的配置獲取jar包,而不用手動去新增jar包,而這裡pom.xml檔案對於學了一點maven的人來說,就有些熟悉了,怎麼通過pom.xml的配置就可以獲取到jar包呢?pom.xml配置檔案從何而來?等等類似問題我們需要搞清楚,如果需要使用pom.xml來獲取jar包,那麼首先該專案就必須為maven專案,maven專案可以這樣去想,就是在java專案和web專案的上面包裹了一層maven,本質上java專案還是java專案,web專案還是web專案,但是包裹了maven之後,就可以使用maven提供的一些功能了(通過pom.xml新增jar包)。
所以,根據上一段的描述,我們最終的目的就是學會如何在pom.xml中配置獲取到我們想要的jar包,在此之前我們就必須瞭解如何建立maven專案,maven專案的結構是怎樣,與普通java,web專案的區別在哪裡,還有如何配置pom.xml獲取到對應的jar包等等
pom.xml獲取junit的jar包的編寫
為什麼通過groupId、artifactId、version三個屬性就能定位一個jar包?
加入上面的pom.xml檔案屬於A專案,那麼A專案肯定是一個maven專案,通過上面這三個屬效能夠找到junit對應版本的jar包,那麼junit專案肯定也是一個maven專案,junit的maven專案中的pom.xml檔案就會有三個識別符號,比如像下圖這樣,然後別的maven專案就能通過這三個屬性來找到junit專案的jar包了。所以,在每個建立的maven專案時都會要求寫上這三個屬性值的。
看完上面這些再看看我繪製的圖,估計能理解個八九不離十: