天天看點

maven的總結概述maven本地倉庫、私服倉庫和遠端倉庫依賴的範圍和傳遞maven的內建和繼承插件總結

概述

       maven是一個項目管理工具,可以幫助我們管理項目的建構,報告和文檔。在學習maven的過程中,主要是學習其對項目建構的管理。

maven

       針對于比較小的軟體開發,maven的作用不是很多,針對于項目比較,需要開發很多子產品,每個子產品又都是獨立的情況下,maven的作用就會變得非常的明顯。

       多個子產品獨立的開發,當合并的時候,就會出現各種各樣的問題,最明顯的問題就是對于依賴jar版本不同發生的沖突,maven可以很好的幫我們解決這個問題。

本地倉庫、私服倉庫和遠端倉庫

       倉庫:存放jar包的地方;本地倉庫:隻能被本計算機使用的倉庫;私服倉庫:能被本區域網路使用的倉庫;遠端倉庫:可以被公網使用的倉庫。

       預設情況下,在項目通過maven配置對jar的依賴後,maven會先看本地倉庫中是否存在該jar,不存在的話就會去中央倉庫看看是否存在(索引完成),存在,下載下傳到本地倉庫,不存在,則報錯。這種情況一般情況不使用,因為,一個系統既然使用了maven,那麼說明,有很多人開發多個獨立的子產品,此時,我們想一下,當我們軟體添加的依賴非常多,并且又找了一個新人來工作的時候,這個新人會瘋的,因為它光從中央倉庫下載下傳jar都需要好幾天,是以,這種方式作為平常練手可以,但是,不具有實用性。

       通過私服解決上的問題,通過架設區域網路内部的伺服器,實作項目依賴jar在私服的目的,此時,項目依賴的流程為,項目通過maven配置對jar的依賴,然後,maven會先看本倉庫中是否存在該jar,不存在的話,就去根據配置私服的工廠,向私服發送相應的請求,私服檢視自己的倉庫是否存在,存在,直接給就行了,不存在就需要去中央倉庫檢視是否存在該jar了。在配置私服的時候,我們需要注意一下,我們應該為maven配置上相應的鏡像,放置出現越權請求的現象,確定項目都隻能從私服上擷取jar,不能直接從中央倉庫擷取jar,當然,我們也可以通過修改maven的central預設工廠來確定越權現象的不發生,但是,最好配置鏡像。

       這裡需要注意一下,中央倉庫不是萬能的,很多的jar在中央倉庫中是找不到,是以,我們應該有一個心理準備,當有一些jar不能下載下傳時,可能是該jar在中央倉庫中不存在(不是我們配置的問題),此時,我們的做法是,從網上下載下傳該jar,然後,将其釋出到私服的相應工廠中。

依賴的範圍和傳遞

       依賴的範圍:該依賴(jar)的作用在建構的那個階段(編譯、打包等)

       依賴的傳遞:該依賴(jar)是否可以被傳遞

       對于上面的概念,不是很清楚,下面具體說一下依賴的範圍和傳遞

       maven配置中對于依賴範圍控制的是scope标簽,其值的不同,代表了該依賴的範圍

                compile(預設值):編譯範圍有效,在編譯和打包時都會将依賴存儲進去

                test:測試範圍有效,在編譯和打包時都不會使用這個依賴

                provided:編譯和測試有效,生成war包不會加入

                runtime:運作有效,編譯時不依賴

       依賴的傳遞,A包依賴于B包,B包依賴C包,這些依賴都是通過maven管理,當B包對于C包的依賴範圍設定test時,那麼,A包依賴B包時,C包就會自動的添加到A大依賴中,如果B報對于C包的依賴範圍設定為compile時,A包就會自動依賴C包(自動添加其引用)

maven的內建和繼承

       在開發系統的時候,我們通常是分子產品開發,當然,子產品的劃分的依據也是多種多樣的,有的是根據功能進行劃分,有的根據專業領域劃分等等,此時,我們以按功能進行劃分,子產品劃分好後,我們具體開發某一個子產品的時候,又将子產品按照層次進行劃分,即,開發一個子產品需要建立多個項目,每個項目代碼一個層,此時,我們再使用maven管理我們的項目時,就會出現相應的問題:操作上的重複,配置資訊的重複,依賴版本控制的困難。

        maven的內建:把一個子產品的多個項目通過配置,統一受一個項目pom的控制

        maven的繼承,把一個子產品的多個項目中重複的配置資訊,全部放到同一個項目的pom中,然後,其它幾個項目的pom繼承該pom,注意,這裡我們為了避免某個項目引入不必要的依賴,我們使用dependencyManagement标簽進行管理,子pom需要顯示(版本和範圍不用寫)的引入父pom的中依賴

插件

       插件是maven的核心,maven有3套獨立的生命周期,這些生命周期的每個操作都是通過插件完成的,當然,這些是maven自帶的插件,我們也可以為maven添加其他的插件,并綁定這些插件在其生命周期執行的時機。

       maven的插件有很多,具體的我們可以在maven的官網(Apache)進行相應檢視(http://maven.apache.org/plugins/index.html),當我們有相應需求的時候,就去網上搜尋

總結

       maven的具體操作,大家可以看一下網上的教程。從上面看,maven幫助我們解決了建構上重複的問題,從我們這一行業來看,其實,我們一直在不停的尋找避免重複(設計的重複、編碼的重複、文檔的重複、建構的重複等)的方法,是以,朋友,為告别重複加油!