Maven倉庫與鏡像配置


一、Repository(倉庫)

img

手動下載jar包web地址

https://mvnrepository.com/

https://search.maven.org/

1.1 Maven倉庫主要有2種:

  • remote repository:遠程公共倉庫,全世界的maven客戶端都能訪問到,可以用URL的形式訪問
  • local repository:本地倉庫

1.2 Remote Repository主要有3種:

  • 中央倉庫:https://repo1.maven.org/maven2/
  • 私服:內網自建的maven repository,其URL是一個內部網址
  • 其他公共倉庫:其他可以互聯網公共訪問maven repository,例如 jboss repository、阿里、華為等頭部互聯網公司建立的倉庫

  repository里存放的是各種jar包和maven插件。當向倉庫請求插件或依賴的時候,會先檢查local repository,如果local repository有則直接返回,否則會向remote repository請求,並緩存到local repository。也可以把做的東西放到本地倉庫,僅供本地使用;或上傳到遠程倉庫,供給別人使用。

二、Mirror

  mirror相當本地maven客戶端向服務端(maven中心倉庫)下載jar包或插件請求的攔截器,它會攔截maven對remote repository的相關請求,把請求里的remote repository地址,重定向到mirror里配置的地址。

2.1 沒有配置mirror

img

2.2 配置mirror

img

  此時 B 被稱為 A 的鏡像。

2.3 mirrorOf標簽

mirrorOf標簽里面放置的是要被鏡像的Repository ID。為了滿足一些復雜的需求,Maven還支持更高級的鏡像配置:

<mirrorOf>*</mirrorOf>
匹配所有遠程倉庫。 

<mirrorOf>repo1,repo2</mirrorOf>
匹配倉庫repo1和repo2,使用逗號分隔多個遠程倉庫。 

<mirrorOf>*,!repo1\</miiroOf>
匹配所有遠程倉庫,repo1除外,使用感嘆號將倉庫從匹配中排除。 

三、Repository與Mirror

3.1 定義

mirror表示兩個Repository之間的關系

3.2 目的

  配置兩個Repository之間的鏡像關系,一般是出於訪問速度和下載速度考慮。

  例如, 有一個項目,需要在公司和住所都編碼,並在項目pom.xml配置了A Maven庫。在公司,是電信網絡,訪問A庫很快,所以maven管理依賴和插件都從A庫下載;在住所,是網通網絡,訪問A庫很慢,但是訪問B庫很快。這時,在住所的setting.xml里,只要配置一下mirrors,讓B庫成為A庫的mirror,即可不用更改項目pom.xml里對於A庫的相關配置。

  如果該鏡像倉庫需要認證,則配置setting.xml中的server標簽即可。

3.3 注意

  需要注意的是,由於鏡像倉庫完全屏蔽了被鏡像倉庫,當鏡像倉庫不穩定或者停止服務的時候,Maven仍將無法訪問被鏡像倉庫,因而將無法下載構件。

四、maven私服

  私服是一種特殊的遠程Maven倉庫(一般使用Nexus搭建),它是架設在局域網內的倉庫服務,私服一般被配置為互聯網遠程倉庫的鏡像,供局域網內的Maven用戶使用。

  當Maven需要下載構件的時候,先向私服請求,如果私服上不存在該構件,則從外部的遠程倉庫下載,同時緩存在私服之上,然后為Maven下載請求提供下載服務,另外,對於自定義或第三方的jar可以從本地上傳到私服,供局域網內其他maven用戶使用。

優點主要有:

  1. 節省外網寬帶
  2. 加速Maven構建
  3. 部署第三方構件
  4. 提高穩定性、增強控制:原因是外網不穩定
  5. 降低中央倉庫的負荷:原因是中央倉庫訪問量太大

img

五、Maven倉庫拉取構件原理圖

img

六、配置阿里雲的maven倉庫

1、倉庫配置

在maven的settings.xml文件里的mirrors節點,添加如下鏡像:

<mirror>
    <name>阿里雲私服</name>
    <!--唯一標識-->
    <id>aly</id>  
    <!--要攔截的倉庫唯一標識-->
    <mirrorOf>central</mirrorOf>
	<!--重定向后的倉庫地址-->
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>  
</mirror>

或者直接在profiles---->>>profile---->>>repositories節點,添加如下子節點:

<repository>
    <name>阿里雲私服n</name>
    <id>aly</id>
    <layout>default</layout>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    <!--配置不允許下載快照版依賴-->
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <!--配置允許下載穩定版本依賴-->
    <releases>
        <enabled>true</enabled>
    </releases>
</repository>

Maven鏡像地址大全

阿里的鏡像地址

<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

華為的鏡像地址

<mirror>
<id>huaweicloud</id>
<name>mirror from maven huaweicloud</name>
<url>http://repo.huaweicloud.com/repository/maven/</url>
<mirrorOf>central</mirrorOf>
</mirror>

使用華為Maven中央倉庫時,需要在servers節點增加一個server子節點,內容如下:

<server>
<id>huaweicloud</id>
<username>anonymous</username>
<password>devcloud</password>
</server>

repo1.maven.org 鏡像地址

<mirror>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>

JBoos 鏡像地址

<mirror>
<id>jboss-public-repository-group</id>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM