maven依賴包和依賴倉庫(2)

按照我認爲的順序來一一講解。apache

1、maven依賴倉庫緩存

maven的依賴倉庫,是用來存放依賴包的。一共有兩種依賴倉庫:本地倉庫和遠程倉庫。遠程倉庫又分爲:中央倉庫(mvn官方)、私服和其餘公共倉庫。maven

1. 本地倉庫.net

本地倉庫是存放在用戶本地計算節點的,即筆記本或者臺式機上。本地倉庫默認路徑是:~/.m2/repository,能夠修改(但不推薦,麻煩)。雖然它是一個文件夾,可是它是由maven管理的,若是經過複製粘貼將依賴包放到本地倉庫中,沒有意義,maven在編譯時候不會發現這個依賴包。所以,若是須要手動向本地倉庫中添加依賴包,須要使用maven install 命令。代理

本地倉庫也會主動添加依賴包。由於編譯的時候,maven首先查看的是本地倉庫,再查看遠程倉庫或者項目中的指明的repo文件夾。所以,當maven發現本地倉庫中沒有給依賴包,在編譯後,會主動添加該依賴包。xml

本地倉庫在安裝完maven時是沒建立,須要第一次啓動maven命令後才建立,而後一直存在。blog

2. 遠程倉庫源碼

2.1 中央倉庫it

中央倉庫是默認的遠程倉庫,maven自帶的就是中央倉庫的配置(http://repo.maven.apache.org/maven2)。中央倉庫包含了絕大多數流行的開源Java構件,以及它的源碼、做者信息、pom依賴複製等。通常來講,不少依賴包均可以在這裏下載。io

2.2 私服 

私服是一種特殊的遠程倉庫,它是架設在局域網內的倉庫服務,私服代理廣域網上的遠程倉庫,供局域網內的Maven用戶使用。當Maven須要下載構件的時候,它從私服請求,若是私服上不存在該構件,則從外部的遠程倉庫下載,緩存在私服上以後,再爲Maven的下載請求提供服務。咱們還能夠把一些沒法從外部倉庫下載到的構件上傳到私服上。

2.3 其餘公共倉庫

2、依賴包座標

每一個依賴包都有惟一的座標,Maven根據這個座標定義了依賴包在本地倉庫或者遠程倉庫中的惟一存儲路徑。

座標由:groupid,artifactid和version肯定。如: com/intel/gkl/gkl/0.5.2/gkl-0.5.2.jar,其中,groupid是com.intel.gkl, artifactid是gkl,version是0.5.2,依賴包的名稱是gkl-0.5.2.jar.

3、依賴包查找過程

1. 當依賴範圍是system的時候,Maven直接從本地文件系統查找依賴包(後續會說明怎麼回事)。

2. 根據依賴座標計算倉庫路徑後,嘗試直接從本地倉庫尋找,若是發現則成功。

3. 在本地倉庫不存在相應的依賴包狀況下,若是項目有建立了repo文件夾而且在pom.xml中指出,那麼,在項目的repo文件夾中查找,若是發現則成功。

4. 在本地倉庫不存在相應的依賴包狀況下,則遍歷全部的遠程倉庫,發現後下載使用(這裏有關於RELEASE或LATEST或者SNAPSHOT的狀況,這裏再也不說明)。

註明:對於3和4的順序,不是很清楚。可是,若是沒有在本地倉庫中找到的在3和4中找到的依賴包,都會被複制到本地倉庫中。

 

 

 

部份內容摘自 http://blog.csdn.net/wanghantong/article/details/36427433