在Maven中,任何一個依賴、插件或者項目構建的輸出,均可以稱之爲構件。html
Maven在某個統一的位置存儲全部項目的共享的構件,這個統一的位置,咱們就稱之爲倉庫。(倉庫就是存放依賴和插件的地方)緩存
任何的構件都有惟一的座標,Maven根據這個座標定義了構件在倉庫中的惟一存儲路徑,maven
解讀Maven在倉庫中的存儲路徑:url
1.基於groupId準備路徑,將句點分隔符轉成路徑分隔符,就是將 "." 轉換成 "/" ; example: org.testng --->org/testngspa
2.基於artifactId準備路徑,將artifactId鏈接到後面:org/testng/testng插件
3.使用version準備路徑,將version鏈接到後面:org/testng/testng/5.8命令行
4.將artifactId於version以分隔符連字號鏈接到後面:org/testng/testng/5.8/tesng-5.8代理
5.判斷若是構件有classifier,就要在 第4項 後增長 分隔符連字號 再加上 classifier,org/testng/testng/5.8/tesng-5.8-jdk5orm
6.檢查構件的extension,若是extension存在,則加上句點分隔符和extension,而extension是由packing決定的,org/testng/testng/5.8/tesng-5.8-jdk5.jarxml
到這裏咱們就明白了Maven 對於構件存儲的細節。
Maven 倉庫的分類:
maven的倉庫只有兩大類:1.本地倉庫 2.遠程倉庫,在遠程倉庫中又分紅了3種:2.1 中央倉庫 2.2 私服 2.3 其它公共庫
1.本地倉庫,顧名思義,就是Maven在本地存儲構件的地方。
注:maven的本地倉庫,在安裝maven後並不會建立,它是在第一次執行maven命令的時候才被建立
maven本地倉庫的默認位置:不管是Windows仍是Linux,在用戶的目錄下都有一個.m2/repository/的倉庫目錄,這就是Maven倉庫的默認位置
如何更改maven默認的本地倉庫的位置:這裏要引入一個新的元素:localRepository,它是存在於maven的settings.xml文件中
2. 遠程倉庫
2.1 說到遠程倉庫先從 最核心的中央倉庫開始,中央倉庫是默認的遠程倉庫,maven在安裝的時候,自帶的就是中央倉庫的配置
在maven的聚合與繼承中咱們說過,全部的maven項目都會繼承超級pom,具體的說,包含了下面配置的pom咱們就稱之爲超級pom
2.2 私服
私服是一種特殊的遠程倉庫,它是架設在局域網內的倉庫服務,私服代理廣域網上的遠程倉庫,供局域網內的Maven用戶使用。當Maven須要下載構件的時候,它從私服請求,若是私服上不存在該構件,則從外部的遠程倉庫下載,緩存在私服上以後,再爲Maven的下載請求提供服務。咱們還能夠把一些沒法從外部倉庫下載到的構件上傳到私服上。
Maven私服的 個特性:
1.節省本身的外網帶寬:減小重複請求形成的外網帶寬消耗
2.加速Maven構件:若是項目配置了不少外部遠程倉庫的時候,構建速度就會大大下降
3.部署第三方構件:有些構件沒法從外部倉庫得到的時候,咱們能夠把這些構件部署到內部倉庫(私服)中,供內部maven項目使用
4.提升穩定性,加強控制:Internet不穩定的時候,maven構建也會變的不穩定,一些私服軟件還提供了其餘的功能
5.下降中央倉庫的負荷:maven中央倉庫被請求的數量是巨大的,配置私服也能夠大大下降中央倉庫的壓力
當前主流的maven私服:
1.Apache的Archiva
2.JFrog的Artifactory
3.Sonatype的Nexus
如何將生成的項目部署到遠程倉庫
完成這項工做,也須要在POM中進行配置,這裏有新引入了一個元素:<distributionManagement>
distributionManagement包含了2個子元素:repository和snapshotRepository, 前者表示發佈版本構件的倉庫,後者表示快照版本的倉庫
這兩個元素都須要配置 id(該遠程倉庫的惟一標識),name,url(表示該倉庫的地址)
向遠程倉庫中部署構件,須要進行認證。配置同上
參考文檔:http://www.cnblogs.com/luotaoyeah/p/3791966.html
配置正確後運行: mvn clean deploy
正確的看待快照
以前咱們在配置pom的時候,對於快照的配置都很謹慎,或者說不多用快照的版本,緣由是它還很不穩定,極容易給咱們的系統帶來未知的錯誤,讓咱們很難查找。其實快照版本也並非一無可取,快照最大的用途是用在開發的過程當中,尤爲是有模塊依賴的時候,好比說AB兩個模塊同時開發,A依賴於B,開發過程當中AB都是持續集成的開發,不斷的修改POM文件和構建工程,這時候版本同步就成了一個很大的問題。使用快照就能夠達到這一目的。
其實在快照版本在發佈的過程當中,Maven會自動爲構件以當前時間戳作標記,有了這個時間戳,咱們就能夠隨時找到最新的快照版本,這樣也就解決剛纔說的 協做開發的問題。
至於A如何檢查B的更新,剛剛在講配置的時候說過,快照配置中有一個元素能夠控制檢查更新的頻率------updatePolicy
咱們也可使用命令行加參數的形式強制執行讓maven檢查更新:
mvn clean install-U