maven倉(cāng)庫(kù)repositories和mirrors的配置及區(qū)別詳解
maven倉(cāng)庫(kù)配置
倉(cāng)庫(kù)優(yōu)先級(jí)為:本地倉(cāng)庫(kù)(localRepositories) > profile中的repositories倉(cāng)庫(kù) > POM > mirrors全局倉(cāng)庫(kù)
通過(guò)mirror配置
如果倉(cāng)庫(kù)X可以提供倉(cāng)庫(kù)Y所有的內(nèi)容,那么我們就可以認(rèn)為X是Y的一個(gè)鏡像,通俗點(diǎn)說(shuō),可以從Y獲取的構(gòu)件都可以從他的鏡像中進(jìn)行獲取??梢圆捎苗R像的方式配置遠(yuǎn)程倉(cāng)庫(kù),鏡像在settings.xml中進(jìn)行配置,在setting.xml中的<mirrors>標(biāo)簽下加入如下子標(biāo)簽配置便配置了一個(gè)maven鏡像。
<mirror> <id>alimaven</id> <name>aliyun maven</name> <!--mirrorOf的配置很重要后面會(huì)詳細(xì)說(shuō)明--> <mirrorOf>central</mirrorOf> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror>
添加如上配置后,maven會(huì)讀取setting.xml中配置的mirror作為jar包的下載地址,我們以在項(xiàng)目中下載fastjson為例來(lái)看一下效果。


可以看到,配置了上面的mirror后,maven是從aliyun倉(cāng)庫(kù)下載的jar包,不配置的時(shí)候,默認(rèn)從apache的maven中央倉(cāng)庫(kù)下載的jar包。
上面提到,<mirrorOf></mirrorOf>的設(shè)置很重要,比如上面我設(shè)置的mirrorOf為<mirrorOf>central</mirrorOf>,如果<mirrorOf></mirrorOf>我隨便設(shè)置一個(gè)參數(shù),如<mirrorOf>abc</mirrorOf>,這時(shí)候我們配置的倉(cāng)庫(kù)就不起作用了,這是因?yàn)閙aven默認(rèn)內(nèi)置了如下一個(gè)倉(cāng)庫(kù),這個(gè)默認(rèn)倉(cāng)庫(kù)的id為central,當(dāng)我們把mirrorOf設(shè)置為<mirrorOf>central</mirrorOf>時(shí),maven就會(huì)查找有沒(méi)有id為central的倉(cāng)庫(kù),然后把id為central的倉(cāng)庫(kù)地址換成我們<mirror>標(biāo)簽配置的那個(gè)url,這樣我們配置的mirror才會(huì)起作用。當(dāng)然我們也可以把mirrorOf設(shè)置為<mirrorOf>*</mirrorOf>,表示所有倉(cāng)庫(kù)都使用我們配置的這個(gè)mirror作為jar包下載地址。
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
通過(guò)<repositories>配置
通過(guò)setting.xml方式配置會(huì)對(duì)所有maven項(xiàng)目生效,如果只想在本項(xiàng)目中配置一個(gè)maven倉(cāng)庫(kù),可以通過(guò)在pom.xml中配置<repositories>標(biāo)簽來(lái)實(shí)現(xiàn)。在自己的maven項(xiàng)目的pom.xml中添加如下配置,就配置好了一個(gè)倉(cāng)庫(kù)。這時(shí)候,maven會(huì)優(yōu)先采用這個(gè)配置,而不會(huì)去讀setting.xml中的配置了。這樣配置好后,maven就會(huì)自動(dòng)從aliyun下載jar包了。
<repositories>
<repository>
<id>aliyun-releases</id>
<name>阿里云倉(cāng)庫(kù)(name可以隨便起)</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
我們知道,repositories標(biāo)簽下可以配置多個(gè)repository,如果我們配置了多個(gè)repository,maven會(huì)用哪個(gè)呢,答案是按出現(xiàn)順序使用,如果第1個(gè)可用,就用第一個(gè),如果不可用,就依次往下找,下面的2張圖片可以說(shuō)明這個(gè)問(wèn)題。


上面配置<repository>時(shí)<id>似乎也沒(méi)什么用,確實(shí)是,如果你只是在pom.xml中配置個(gè)倉(cāng)庫(kù),這個(gè)id是沒(méi)什么用的,可以隨便寫,其實(shí)這個(gè)id是配合上面講的mirror一塊使用的,還記得mirrorOf嗎,我們配置mirrorOf為<mirrorOf>central</mirrorOf>是,mirror中的url就是central倉(cāng)庫(kù)的url給覆蓋了,所以這里的<repository>標(biāo)簽下的id是給mirrorOf用的。
可以看下面一個(gè)例子,本來(lái)我們的abc-releases這個(gè)倉(cāng)庫(kù)是不可用的,因?yàn)楦揪蜎](méi)有https://abc.def.com/repository/public/這個(gè)倉(cāng)庫(kù),但是我們通過(guò)mirror配置,改變了id為abc-releases這個(gè)倉(cāng)庫(kù)的url,從而使用maven也可以從id為abc-releases這個(gè)倉(cāng)庫(kù)下載jar包了。當(dāng)然這樣配置也沒(méi)只啥意義,只是為了方便理解repository和mirror之間的關(guān)系。

maven倉(cāng)庫(kù)配置的其他選項(xiàng)
<!--releases和snapshots中有個(gè)enabled屬性,是個(gè)boolean值,默認(rèn)為true,
表示是否需要從這個(gè)遠(yuǎn)程倉(cāng)庫(kù)中下載穩(wěn)定版本或者快照版本的構(gòu)建,
一般使用第三方的倉(cāng)庫(kù),都是下載穩(wěn)定版本的構(gòu)建。-->
<repository>
<id>aliyun-releases</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
maven默認(rèn)的內(nèi)置倉(cāng)庫(kù)的配置位置
<!--
可以從以下文件中找到maven倉(cāng)庫(kù)的默認(rèn)配置如下
apache-maven-3.6.1\lib\maven-model-builder-3.6.1.jar\org\apache\maven\model\pom-4.0.0.xml
-->
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
到此這篇關(guān)于maven倉(cāng)庫(kù)repositories和mirrors的配置及區(qū)別詳解的文章就介紹到這了,更多相關(guān)maven倉(cāng)庫(kù)repositories和mirrors配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- maven倉(cāng)庫(kù)中心mirrors配置多個(gè)下載中心(執(zhí)行最快的鏡像)
- IDEA最新版2020.1的maven工程本地依賴倉(cāng)庫(kù)無(wú)法使用問(wèn)題(已解決)
- Maven發(fā)布封裝到中央倉(cāng)庫(kù)時(shí)候報(bào)錯(cuò):no default secret key
- Maven遠(yuǎn)程倉(cāng)庫(kù)地址修改實(shí)現(xiàn)解析
- 如何通過(guò)Maven倉(cāng)庫(kù)安裝Spire系列的Java產(chǎn)品
- Windows下maven安裝配置圖文教程(包括本地化倉(cāng)庫(kù)配置)
- 詳解如何將JAR包發(fā)布到Maven中央倉(cāng)庫(kù)
- Maven訪問(wèn)倉(cāng)庫(kù)順序代碼實(shí)例解析
相關(guān)文章
SpringBoot整個(gè)啟動(dòng)過(guò)程的分析
今天小編就為大家分享一篇關(guān)于SpringBoot整個(gè)啟動(dòng)過(guò)程的分析,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
SpringBoot如何讀取application.properties配置文件
這篇文章主要介紹了SpringBoot如何讀取application.properties配置文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java Kafka分區(qū)發(fā)送及消費(fèi)實(shí)戰(zhàn)
本文主要介紹了Kafka分區(qū)發(fā)送及消費(fèi)實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Spring項(xiàng)目接入DeepSeek的兩種超簡(jiǎn)單的方式分享
DeepSeek?作為一款卓越的國(guó)產(chǎn)?AI?模型,越來(lái)越多的公司考慮在自己的應(yīng)用中集成,本文為大家?分享了Spring項(xiàng)目接入DeepSeek的兩種超簡(jiǎn)單的方式,希望對(duì)大家有所幫助2025-02-02
快速校驗(yàn)實(shí)體類時(shí),@Valid,@Validated,@NotNull注解無(wú)效的解決
這篇文章主要介紹了快速校驗(yàn)實(shí)體類時(shí),@Valid,@Validated,@NotNull注解無(wú)效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Java中System.currentTimeMillis()計(jì)算方式與時(shí)間單位轉(zhuǎn)換講解
本文詳細(xì)講解了Java中System.currentTimeMillis()計(jì)算方式與時(shí)間單位轉(zhuǎn)換,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12

