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


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


上面配置<repository>時<id>似乎也沒什么用,確實是,如果你只是在pom.xml中配置個倉庫,這個id是沒什么用的,可以隨便寫,其實這個id是配合上面講的mirror一塊使用的,還記得mirrorOf嗎,我們配置mirrorOf為<mirrorOf>central</mirrorOf>是,mirror中的url就是central倉庫的url給覆蓋了,所以這里的<repository>標簽下的id是給mirrorOf用的。
可以看下面一個例子,本來我們的abc-releases這個倉庫是不可用的,因為根本就沒有https://abc.def.com/repository/public/這個倉庫,但是我們通過mirror配置,改變了id為abc-releases這個倉庫的url,從而使用maven也可以從id為abc-releases這個倉庫下載jar包了。當然這樣配置也沒只啥意義,只是為了方便理解repository和mirror之間的關系。

maven倉庫配置的其他選項
<!--releases和snapshots中有個enabled屬性,是個boolean值,默認為true,
表示是否需要從這個遠程倉庫中下載穩(wěn)定版本或者快照版本的構建,
一般使用第三方的倉庫,都是下載穩(wěn)定版本的構建。-->
<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默認的內(nèi)置倉庫的配置位置
<!--
可以從以下文件中找到maven倉庫的默認配置如下
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>
到此這篇關于maven倉庫repositories和mirrors的配置及區(qū)別詳解的文章就介紹到這了,更多相關maven倉庫repositories和mirrors配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot如何讀取application.properties配置文件
這篇文章主要介紹了SpringBoot如何讀取application.properties配置文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
Java Kafka分區(qū)發(fā)送及消費實戰(zhàn)
本文主要介紹了Kafka分區(qū)發(fā)送及消費實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07
快速校驗實體類時,@Valid,@Validated,@NotNull注解無效的解決
這篇文章主要介紹了快速校驗實體類時,@Valid,@Validated,@NotNull注解無效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
Java中System.currentTimeMillis()計算方式與時間單位轉換講解
本文詳細講解了Java中System.currentTimeMillis()計算方式與時間單位轉換,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12

