詳解maven的setting配置文件中mirror和repository的區(qū)別
當(dāng)maven需要到的依賴jar包不在本地倉庫時(shí), 就需要到遠(yuǎn)程倉庫下載 .
這個(gè)時(shí)候如果mavensetting.xml中配置了鏡像 , 而且鏡像配置的規(guī)則中匹配到目標(biāo)倉庫時(shí) ,
maven認(rèn)為目標(biāo)倉庫被鏡像了, 不會(huì)再去被鏡像倉庫下載依賴jar包, 而是直接去鏡像倉庫下載.
簡(jiǎn)單而言, mirror可以攔截對(duì)遠(yuǎn)程倉庫的請(qǐng)求 , 改變對(duì)目標(biāo)倉庫的下載地址
repository
repository就是個(gè)倉庫.
maven里有兩種倉庫,本地倉庫和遠(yuǎn)程倉庫。
遠(yuǎn)程倉庫相當(dāng)于公共的倉庫,大家都能看到。
本地倉庫是你本地的緩存副本,只有你看的到,主要起緩存作用。
當(dāng)你向倉庫請(qǐng)求插件或依賴的時(shí)候,會(huì)先檢查本地倉庫里是否有。
如果有則直接返回,否則會(huì)向遠(yuǎn)程倉庫請(qǐng)求,并被緩存到本地倉庫。
遠(yuǎn)程倉庫可以在工程的pom.xml文件里指定。
如果沒指定,默認(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> *
本地倉庫默認(rèn)在你本地的用戶目錄下的.m2/repository目錄下。
mirror
mirror就是鏡像,主要提供一個(gè)方便地切換遠(yuǎn)程倉庫地址的途徑。
比如,上班的時(shí)候在公司,用電信的網(wǎng)絡(luò),連的是電信的倉庫。
回到家后,是網(wǎng)通的網(wǎng)絡(luò),我想連網(wǎng)通的倉庫,就可以通過mirror配置,統(tǒng)一把我工程里的倉庫地址都改成聯(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)程倉庫做了個(gè)鏡像。
以后向central這個(gè)倉庫發(fā)的請(qǐng)求都會(huì)發(fā)到http://uk.maven.org/maven2而不是http://repo1.maven.org/maven2了。
<mirrorOf>central</mirrorOf>里是要替代的倉庫的id。
如果填*,就會(huì)替代所有倉庫。
高級(jí)鏡像配置
為了滿足一些復(fù)雜的需求,Maven還支持更高級(jí)的鏡像配置:
1.<mirrorOf>*</mirrorOf>
匹配所有遠(yuǎn)程倉庫。
2.<mirrorOf>external:*</mirrorOf>
匹配所有遠(yuǎn)程倉庫,使用localhost的除外,使用file://協(xié)議的除外。也就是說,匹配所有不在本機(jī)上的遠(yuǎn)程倉庫。
3.<mirrorOf>repo1,repo2</mirrorOf>
匹配倉庫repo1和repo2,使用逗號(hào)分隔多個(gè)遠(yuǎn)程倉庫。
4.<mirrorOf>*,!repo1</miiroOf>
匹配所有遠(yuǎn)程倉庫,repo1除外,使用感嘆號(hào)將倉庫從匹配中排除。
需要注意的是,由于鏡像倉庫完全屏蔽了被鏡像倉庫,當(dāng)鏡像倉庫不穩(wěn)定或者停止服務(wù)的時(shí)候,Maven仍將無法訪問被鏡像倉庫,因而將無法下載構(gòu)件。
例子
個(gè)人的maven配置了阿里的鏡像 , 而項(xiàng)目中需要使用到一些第三方j(luò)ar包, 為了方便引入 , 已上傳到192.168.0.201的nexus私服下.
但由于個(gè)人maven阿里的鏡像使用默認(rèn)mirrorOf規(guī)則=*, 所有的倉庫都被鏡像 , 不會(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> <!--國內(nèi)阿里云提供的鏡像,非常不錯(cuò)--> <mirror> <!--This sends everything else to /public --> <id>aliyun_nexus</id> <!--對(duì)所有倉庫使用該鏡像,除了一個(gè)名為maven_nexus_201的倉庫除外--> <!--這個(gè)名為maven_nexus_201的倉庫可以在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)程倉庫
<repositories> <!-- 192.168.0.201遠(yuǎn)程倉庫 --> <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私有倉庫,如圖:
如何通過網(wǎng)頁方式將jar包上傳到nexus?
點(diǎn)擊左邊菜單“Repositories”,選擇右邊列表“3rd party“
如何通過網(wǎng)頁方式將jar包上傳到nexus?
點(diǎn)擊“3rd party”,選擇artifact Upload,如下圖:
如何通過網(wǎng)頁方式將jar包上傳到nexus?
在artifact Upload界面顯示的有GAV Parameter,groupId,artifactId,Version,Packaging等等參數(shù),界面如圖:
如何通過網(wǎng)頁方式將jar包上傳到nexus?
將以上參數(shù)填完之后,選擇要上傳的jar包,點(diǎn)擊”add artifact“,最后點(diǎn)擊”save“保存按鈕即可,如下圖所示:
如何通過網(wǎng)頁方式將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í)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)Flappy Bird游戲源代碼
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)Flappy Bird游戲源代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12java?kafka如何動(dòng)態(tài)設(shè)置用戶讀寫權(quán)限
這篇文章主要介紹了java?kafka如何動(dòng)態(tài)設(shè)置用戶讀寫權(quán)限問題,具有很好的參考家價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08BiConsumer接口中的方法andThen?accept使用詳解
這篇文章主要為大家介紹了BiConsumer接口中的方法andThen?accept使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07java中對(duì)象調(diào)用成員變量與成員實(shí)例方法
在本篇文章里小編給各位分享的是關(guān)于java中對(duì)象調(diào)用成員變量與成員實(shí)例方法,需要的朋友們可以學(xué)習(xí)參考下。2020-02-02詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼
這篇文章主要介紹了詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Java實(shí)現(xiàn)過濾掉map集合中key或value為空的值示例
這篇文章主要介紹了Java實(shí)現(xiàn)過濾掉map集合中key或value為空的值,涉及java針對(duì)map的簡(jiǎn)單遍歷、判斷、移除等相關(guān)操作技巧,需要的朋友可以參考下2018-06-06mybatis 映射文件中if標(biāo)簽判斷字符串相等的兩種方式
這篇文章主要介紹了mybatis 映射文件中if標(biāo)簽判斷字符串相等的方式,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06