溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

詳解maven的setting配置文件中mirror和repository的區(qū)別

發(fā)布時(shí)間:2020-09-24 11:18:21 來(lái)源:腳本之家 閱讀:375 作者:DrinkwaterGor 欄目:編程語(yǔ)言

當(dāng)maven需要到的依賴jar包不在本地倉(cāng)庫(kù)時(shí), 就需要到遠(yuǎn)程倉(cāng)庫(kù)下載 .

這個(gè)時(shí)候如果mavensetting.xml中配置了鏡像 , 而且鏡像配置的規(guī)則中匹配到目標(biāo)倉(cāng)庫(kù)時(shí) ,

maven認(rèn)為目標(biāo)倉(cāng)庫(kù)被鏡像了, 不會(huì)再去被鏡像倉(cāng)庫(kù)下載依賴jar包, 而是直接去鏡像倉(cāng)庫(kù)下載.

簡(jiǎn)單而言, mirror可以攔截對(duì)遠(yuǎn)程倉(cāng)庫(kù)的請(qǐng)求 , 改變對(duì)目標(biāo)倉(cāng)庫(kù)的下載地址

repository

repository就是個(gè)倉(cāng)庫(kù).

maven里有兩種倉(cāng)庫(kù),本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)。

遠(yuǎn)程倉(cāng)庫(kù)相當(dāng)于公共的倉(cāng)庫(kù),大家都能看到。

本地倉(cāng)庫(kù)是你本地的緩存副本,只有你看的到,主要起緩存作用。

當(dāng)你向倉(cāng)庫(kù)請(qǐng)求插件或依賴的時(shí)候,會(huì)先檢查本地倉(cāng)庫(kù)里是否有。

如果有則直接返回,否則會(huì)向遠(yuǎn)程倉(cāng)庫(kù)請(qǐng)求,并被緩存到本地倉(cāng)庫(kù)。

遠(yuǎn)程倉(cāng)庫(kù)可以在工程的pom.xml文件里指定。

如果沒(méi)指定,默認(rèn)會(huì)到http://repo1.maven.org/maven2這個(gè)地方去請(qǐng)求插件和依賴包。

*<repository> *

*  <snapshots> *

*  <enabled>false</enabled> *

*  </snapshots> *

*  <id>central</id> *

*  <name>Maven Repository Switchboard</name> *

*  <url>**[http://repo1.maven.org/maven2</url>*

* </repository> *

本地倉(cāng)庫(kù)默認(rèn)在你本地的用戶目錄下的.m2/repository目錄下。

mirror

mirror就是鏡像,主要提供一個(gè)方便地切換遠(yuǎn)程倉(cāng)庫(kù)地址的途徑。

比如,上班的時(shí)候在公司,用電信的網(wǎng)絡(luò),連的是電信的倉(cāng)庫(kù)。

回到家后,是網(wǎng)通的網(wǎng)絡(luò),我想連網(wǎng)通的倉(cāng)庫(kù),就可以通過(guò)mirror配置,統(tǒng)一把我工程里的倉(cāng)庫(kù)地址都改成聯(lián)通的,而不用到具體工程配置文件里一個(gè)一個(gè)地改地址。

mirror的配置在.m2/settings.xml里。如:

*<mirrors> *

* <mirror> *

* <id>UK</id> *

* <name>UK Central</name> *

* <url>**[http://uk.maven.org/maven2</url> ](http://uk.maven.org/maven2%3C/url%3E%C2%A0%C2%A0)*

* <mirrorOf>central</mirrorOf> *

* </mirror> *

*</mirrors> *

這樣的話,就會(huì)給上面id為central的遠(yuǎn)程倉(cāng)庫(kù)做了個(gè)鏡像。

以后向central這個(gè)倉(cāng)庫(kù)發(fā)的請(qǐng)求都會(huì)發(fā)到http://uk.maven.org/maven2而不是http://repo1.maven.org/maven2了。

<mirrorOf>central</mirrorOf>里是要替代的倉(cāng)庫(kù)的id。

如果填*,就會(huì)替代所有倉(cāng)庫(kù)。

高級(jí)鏡像配置

為了滿足一些復(fù)雜的需求,Maven還支持更高級(jí)的鏡像配置:

1.<mirrorOf>*</mirrorOf>
匹配所有遠(yuǎn)程倉(cāng)庫(kù)。

2.<mirrorOf>external:*</mirrorOf>
匹配所有遠(yuǎn)程倉(cāng)庫(kù),使用localhost的除外,使用file://協(xié)議的除外。也就是說(shuō),匹配所有不在本機(jī)上的遠(yuǎn)程倉(cāng)庫(kù)。

3.<mirrorOf>repo1,repo2</mirrorOf>
匹配倉(cāng)庫(kù)repo1和repo2,使用逗號(hào)分隔多個(gè)遠(yuǎn)程倉(cāng)庫(kù)。

4.<mirrorOf>*,!repo1</miiroOf>
匹配所有遠(yuǎn)程倉(cāng)庫(kù),repo1除外,使用感嘆號(hào)將倉(cāng)庫(kù)從匹配中排除。

需要注意的是,由于鏡像倉(cāng)庫(kù)完全屏蔽了被鏡像倉(cāng)庫(kù),當(dāng)鏡像倉(cāng)庫(kù)不穩(wěn)定或者停止服務(wù)的時(shí)候,Maven仍將無(wú)法訪問(wèn)被鏡像倉(cāng)庫(kù),因而將無(wú)法下載構(gòu)件。

例子

個(gè)人的maven配置了阿里的鏡像 , 而項(xiàng)目中需要使用到一些第三方j(luò)ar包, 為了方便引入 , 已上傳到192.168.0.201的nexus私服下.
但由于個(gè)人maven阿里的鏡像使用默認(rèn)mirrorOf規(guī)則=*, 所有的倉(cāng)庫(kù)都被鏡像 , 不會(huì)再去192.168.0.201下下載第三方j(luò)ar包
上傳的第三方j(luò)ar包目標(biāo)路徑 :
http://192.168.0.201:8081/nexus/content/groups/public/com/alipay/sdk-java/20170615110434/sdk-java-20170615110434.pom

被鏡像后路徑 :
http://maven.aliyun.com/nexus/content/groups/public/com/alipay/sdk-java/20170615110434/sdk-java-20170615110434.pom
所以需要修改鏡像的mirrorOf規(guī)則 , 避免默認(rèn)從鏡像中下載

maven的conf/setting.xml

 <mirrors>
  <!--國(guó)內(nèi)阿里云提供的鏡像,非常不錯(cuò)-->
 <mirror>
  <!--This sends everything else to /public -->
  <id>aliyun_nexus</id>
  <!--對(duì)所有倉(cāng)庫(kù)使用該鏡像,除了一個(gè)名為maven_nexus_201的倉(cāng)庫(kù)除外-->
  <!--這個(gè)名為maven_nexus_201的倉(cāng)庫(kù)可以在javamaven項(xiàng)目中配置一個(gè)repository-->
  <mirrorOf>*,!maven_nexus_201</mirrorOf> 
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
 </mirror>
 </mirrors>

maven項(xiàng)目下的pom.xml配置一個(gè)遠(yuǎn)程倉(cāng)庫(kù)

<repositories>
  <!-- 192.168.0.201遠(yuǎn)程倉(cāng)庫(kù) -->
  <repository>
   <id>maven_nexus_201</id>
   <name>maven_nexus_201</name>
   <layout>default</layout>
   <url>http://192.168.0.201:8081/nexus/content/groups/public/</url>
   <snapshots> 
    <enabled>true</enabled> 
    </snapshots>
  </repository>
</repositories>

在http://192.168.0.201:8081/nexus下上傳第三方j(luò)ar包依賴

登陸已經(jīng)安裝好的nexus私有倉(cāng)庫(kù),如圖:

詳解maven的setting配置文件中mirror和repository的區(qū)別

如何通過(guò)網(wǎng)頁(yè)方式將jar包上傳到nexus?

點(diǎn)擊左邊菜單“Repositories”,選擇右邊列表“3rd party“

詳解maven的setting配置文件中mirror和repository的區(qū)別

如何通過(guò)網(wǎng)頁(yè)方式將jar包上傳到nexus?

點(diǎn)擊“3rd party”,選擇artifact Upload,如下圖:

詳解maven的setting配置文件中mirror和repository的區(qū)別

如何通過(guò)網(wǎng)頁(yè)方式將jar包上傳到nexus?

在artifact Upload界面顯示的有GAV Parameter,groupId,artifactId,Version,Packaging等等參數(shù),界面如圖:

詳解maven的setting配置文件中mirror和repository的區(qū)別

如何通過(guò)網(wǎng)頁(yè)方式將jar包上傳到nexus?

將以上參數(shù)填完之后,選擇要上傳的jar包,點(diǎn)擊”add artifact“,最后點(diǎn)擊”save“保存按鈕即可,如下圖所示:

詳解maven的setting配置文件中mirror和repository的區(qū)別

如何通過(guò)網(wǎng)頁(yè)方式將jar包上傳到nexus?

maven項(xiàng)目下的pom.xml引入依賴

<dependency>
 <groupId>com.alipay</groupId>
 <artifactId>sdk-java</artifactId>
 <version>20170615110434</version>
</dependency>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI