maven?repository詳解
保存構(gòu)件的地方即為repository(倉庫)。
倉庫的分類
maven倉庫分為兩類:本地倉庫和遠(yuǎn)程倉庫。
當(dāng)maven根據(jù)pom中定義的坐標(biāo)尋找構(gòu)件時(shí),首先在本地倉庫中尋找,當(dāng)找不到時(shí)再從遠(yuǎn)程倉庫尋找,都找不到時(shí)拋出異常。
maven遠(yuǎn)程倉庫還可進(jìn)一步分類:
本地倉庫
默認(rèn)maven會在c盤創(chuàng)建一個.m2的本地倉庫,如果要修改本地倉庫地址,可以修改setting.xml文件:
<settings> <localRepository>D:\64\m2\repository</localRepository> </settings>
遠(yuǎn)程倉庫中央倉庫
使用解壓軟件打開%M2_HOME%/lib/maven-model-builder-3.1.1.jar,然后訪問路徑org/apache/maven/model/pom-4.0.0.xml,可看到:
<repositories> <repository> <id>central</id> <name>Central Repository</name> <url>http://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
包含這段配置的文件是所有maven項(xiàng)目都會繼承的超級pom。上述配置中,snapshots子元素enabled的值為false,表示不從中央倉庫下載快照版本的構(gòu)件。
私服
私服是一種特殊的遠(yuǎn)程倉庫,架設(shè)于局域網(wǎng)內(nèi)。當(dāng)maven需要下載構(gòu)件時(shí),先從私服尋找,私服中沒有再從外部倉庫下載。
私服有許多顯著的優(yōu)點(diǎn):
■ 節(jié)省外網(wǎng)帶寬
■ 加速maven構(gòu)件
■ 部署第三方構(gòu)件
■ 提高穩(wěn)定性,增強(qiáng)控制
■ 降低中央倉庫的負(fù)荷
遠(yuǎn)程倉庫配置
如果默認(rèn)的遠(yuǎn)程中央倉庫無法滿足需求,我們可以在pom中添加遠(yuǎn)程倉庫的配置:
<project> ... <repositories> <repository> <id>jboss</id> <name>JBoss Repository</name> <url>http://repository.jboss.com/maven2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> <layout>default</layout> </repository> </repositories> </project>
在repositories元素下,使用repository元素聲明一個或多個遠(yuǎn)程倉庫。上面的xml聲明了一個id為jboss,名稱為JBoss Repository的倉庫。
任何一個倉庫的id是唯一的,maven自帶的中央倉庫使用的id為central,如果其他倉庫的id也為central,那么它將覆蓋自帶的中央倉庫。
url指向倉庫地址,一般該地址都是基于http協(xié)議。releases的enabled值為true,表示開啟JBoss倉庫的發(fā)布版本下載支持,snapshots的enabled值為false,表示關(guān)閉JBoss倉庫的快照版本的下載支持。
release和snapshots元素還可以配置另外兩個子元素:
<snapshots> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> <checksumPolicy>ignore</checksumPolicy> </snapshots>
updatePolicy元素配置maven從遠(yuǎn)程倉庫檢查更新的頻率,默認(rèn)值為daily。其他可用值有:never —— 從不檢查更新,always —— 每次構(gòu)建都檢查更新,interval:X —— 每隔X分鐘檢查一次更新。用戶也可以使用命令 mvn clean install -U強(qiáng)制更新。
checksumPolicy元素用來配置當(dāng)下載構(gòu)件時(shí),maven檢驗(yàn)和驗(yàn)證失敗時(shí)候的動作,默認(rèn)為warn,即輸出警告信息,ignore則為忽略錯誤。
遠(yuǎn)程倉庫認(rèn)證
如果遠(yuǎn)程倉庫出于安全的考慮設(shè)置了用戶名和密碼,這時(shí)候我們必須在settings.xml中配置:
<settings> ... <servers> <server> <id>my-proj</id> <username>repo-user</username> <password>repo_pwd</password> </server> </servers> </settings>
上述xml指定了id為my-proj的遠(yuǎn)程倉庫的用戶名和密碼。
部署至遠(yuǎn)程倉庫
如前所述,私服一大作用是可以部署第三方構(gòu)件。無論是開發(fā)中生成的構(gòu)件還是正式發(fā)布的構(gòu)件,都需要部署到私服中供小組中的其他開發(fā)人員使用,在maven項(xiàng)目pom中配置:
<project> ... <distributionManagement> <snapshotRepository> <id>user-snapshot</id> <name>User Porject Snapshot</name> <url>http://192.168.10.217:8081/nexus/ content/repositories/snapshots/</url> <uniqueVersion>true</uniqueVersion> </snapshotRepository> <repository> <id>user-release</id> <name>User Porject Release</name> <url>http://192.168.10.217:8081/nexus/ content/repositories/releases/</url> </repository> </distributionManagement> </project>
上述xml明確指定了快照版本和發(fā)行版本的私服id和地址,如前所述,如果私服設(shè)置了賬號密碼,則應(yīng)該在settings.xml中設(shè)置對應(yīng)id的私服賬號和密碼,就本例來說,我們應(yīng)該在settings.xml中設(shè)置:
<settings> <servers> <server> <id>user-release</id> <username>deployment</username> <password>deployment123</password> </server> <server> <id>user-snapshot</id> <username>deployment</username> <password>deployment123</password> </server> </servers> </settings>
配置正確后,可以運(yùn)行命令mvn clean deploy將項(xiàng)目構(gòu)建輸出的構(gòu)件部署到對應(yīng)的遠(yuǎn)程倉庫。
快照版本
版本元素version中添加SNAPSHOT標(biāo)識,表明該構(gòu)件為快照版本。SNAPSHOT版本的構(gòu)件發(fā)布到私服的過程中,maven會自動加上時(shí)間戳。另一位開發(fā)者從該私服獲取這個構(gòu)件的時(shí)候,maven會自動獲取時(shí)間戳最新的構(gòu)件。
快照版本只應(yīng)該在組織內(nèi)部依賴使用,項(xiàng)目不應(yīng)該依賴于任何組織外部的快照版本依賴。因?yàn)榭煺瞻姹镜牟环€(wěn)定性會對項(xiàng)目造成潛在的危險(xiǎn)。
鏡像
如果倉庫B可以提供倉庫A存儲的所有內(nèi)容,那么就可以認(rèn)為B是A的一個鏡像。maven默認(rèn)的遠(yuǎn)程中央倉庫由于服務(wù)器不在中國,所以訪問速度可能會慢些,這時(shí)候可以再settings.xml中配置一個鏡像:
<settings> ... <mirrors> <mirror> <id>maven.net.cn</id> <name>one of the central mirrors in china</name> <url>http://maven.net.cn/content/groups/public</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> </settings>
<mirrorOf>的值為central,表示該配置為中央倉庫的鏡像。任何對于中央倉庫的請求都會本轉(zhuǎn)至該鏡像。
鏡像常用于私服。由于私服可以代理任何外部的公共倉庫,所以可以說私服就是所有倉庫的鏡像。如:
<settings> ... <mirrors> <mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://192.168.10.217:8081/nexus/content/groups/public/</url> </mirror> </mirrors> </settings>
<mirrorOf>的值為*號,表示http://192.168.10.217:8081/nexus/content/groups/public/是所有外部倉庫的鏡像。任何對遠(yuǎn)程倉庫的請求都會被轉(zhuǎn)到這個地址。
<mirrorOf>的配置:
■ <mirrorOf>*<mirrorOf>:匹配所有的遠(yuǎn)程倉庫
■ <mirrorOf>external:*<mirrorOf>:匹配所有不在本機(jī)上的遠(yuǎn)程倉庫
■ <mirrorOf>repo1,repo2<mirrorOf>:匹配倉庫repo1和repo2
■ <mirrorOf>*,!repo1<mirrorOf>:匹配除了repo1之外的所有遠(yuǎn)程倉庫
鏡像倉庫完全屏蔽了被鏡像倉庫,當(dāng)鏡像倉庫停止服務(wù)的時(shí)候,maven仍無法訪問被鏡像倉庫,因而將無法下載構(gòu)建。
倉庫搜索服務(wù)
下面列出幾個目前能用的maven坐標(biāo)服務(wù):
1.The Centrl Repository:http://search.maven.org/
2.Maven Repository:http://www.mvnrepository.com/
3.Nexus Repository Manager:https://repository.sonatype.org/#welcome
到此這篇關(guān)于maven repository的文章就介紹到這了,更多相關(guān)maven repository內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot開發(fā)技巧之使用AOP記錄日志示例解析
這篇文章主要為大家介紹了SpringBoot開發(fā)技巧之如何利用AOP記錄日志的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10SpringBoot項(xiàng)目中使用redis緩存的方法步驟
本篇文章主要介紹了SpringBoot項(xiàng)目中使用redis緩存的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12RabbitMQ延遲隊(duì)列及消息延遲推送實(shí)現(xiàn)詳解
這篇文章主要介紹了RabbitMQ延遲隊(duì)列及消息延遲推送實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12java ArrayList.remove()的三種錯誤用法以及六種正確用法詳解
這篇文章主要介紹了java ArrayList.remove()的三種錯誤用法以及六種正確用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01詳解使用Java原生代理實(shí)現(xiàn)AOP實(shí)例
本篇文章主要介紹了詳解使用Java原生代理實(shí)現(xiàn)AOP實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01Flutter驗(yàn)證碼輸入框的2種方法實(shí)現(xiàn)
本文主要介紹了Flutter驗(yàn)證碼輸入框的2種方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12關(guān)于Filter中獲取請求體body后再次讀取的問題
這篇文章主要介紹了關(guān)于Filter中獲取請求體body后再次讀取的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03