Maven中配置mirrorOf


當maven需要到的依賴jar包不在本地倉庫時, 就需要到遠程倉庫下載 .

這個時候如果mavensetting.xml中配置了鏡像 , 而且鏡像配置的規則中匹配到目標倉庫時 ,
maven認為目標倉庫被鏡像了, 不會再去被鏡像倉庫下載依賴jar包, 而是直接去鏡像倉庫下載.

簡單而言, mirror可以攔截對遠程倉庫的請求 , 改變對目標倉庫的下載地址

在java的maven項目中編譯時經常會配置maven的mirrorOf,

例如在settings文件中配置aliyun的倉庫:

<mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>*</mirrorOf>  //代理倉庫配置
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
mirrorOf可以理解“為某個倉庫(repository)的做鏡像”,填寫的是repostoryId。 ”*“ 的意思就是匹配所有的倉庫(repository)。相當於一個攔截器,它會攔截maven對remote repository的相關請求,把請求里的remote repository地址,重定向到mirror里配置的地址。
我們知道maven倉庫有jar倉庫和plugin倉庫, 例如pom中配置倉庫,如下:
<repositories>
    <repository>
      <id>repo.jenkins-ci.org</id>  //repostoryId 
      <url>https://repo.jenkins-ci.org/public/</url>
    </repository>
  </repositories>
也可以配置在settings.xml中,settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。它包含了id、activation、repositories、pluginRepositories和 properties元素。例如<profiles>節點中配置如下:
   <id>my-repo-id</id>  //repostoryId
    <name>repo name</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
    <releases>
      <enabled>true</enabled>
    </releases>
<snapshots>
      <enabled>true</enabled>
    </snapshots>
    <layout>default</layout>
  </repository>
mirrorOf=“*”時鏡像所有的repositoryId,包括repositories和pluginRepositories。如果你需要某個jar就會從鏡像mirrorOd配置的地址去下載這個jar。 其他配置的repostory都沒用
當然你也可以配置mirrorOf鏡像你自己的repository倉庫,例如你想鏡像my-repo-id,你把mirrorOf配置成my-repo-id,那么你配置的my-repo-id這個倉庫的url就沒用了,被鏡像代表了
在maven中配置一個mirror時,有多種形式,例如

mirrorOf=“*”  //剛才經過,mirror一切,你配置的repository不起作用了

mirrorOf=my-repo-id //鏡像my-repo-id,你配置的my-repo-id倉庫不起作用了

mirrorOf=*,!my-repo-id  //!表示非運算,排除你配置的my-repo-id倉庫,其他倉庫都被鏡像了。就是請求下載my-repo-id的倉庫的jar不使用mirror的url下載,其他都是用mirror配置的url下載

mirrorOf=external:*  //如果本地庫存在就用本地庫的,如果本地沒有所有下載就用mirror配置的url下載

我們知道apache-maven的settings.xml不做任何配置時是有默認的倉庫的,這個倉庫就是central倉庫,默認值是https://repo.maven.apache.org/maven2/,我們可以配置mirrorOf=central只鏡像默認的central倉庫。
如果你只配置了mirrorOf=”my-repo-id“沒有配置central或*,那么請求maven會判斷,首先在默認的central倉庫https://repo.maven.apache.org/maven2/找依賴,如果找不到就去my-repo-id對應的倉庫找,遍歷所有倉庫后找不到就報錯。

例子

個人的maven配置了阿里的鏡像 , 而項目中需要使用到一些第三方jar包, 為了方便引入 , 已上傳到192.168.0.201的nexus私服下。
但由於個人maven阿里的鏡像使用默認mirrorOf規則=*, 所有的倉庫都被鏡像 , 不會再去192.168.0.201下下載第三方jar包。
上傳的第三方jar包目標路徑 :
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規則 , 避免默認從鏡像中下載

maven的conf/setting.xml

<mirrors>
        <!--國內阿里雲提供的鏡像,非常不錯-->
    <mirror>
        <!--This sends everything else to /public -->
        <id>aliyun_nexus</id>
        <!--對所有倉庫使用該鏡像,除了一個名為maven_nexus_201的倉庫除外-->
        <!--這個名為maven_nexus_201的倉庫可以在javamaven項目中配置一個repository-->
        <mirrorOf>*,!maven_nexus_201</mirrorOf> 
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
  </mirrors>

 

https://www.jianshu.com/p/c4f02c5bdfc7

https://www.jianshu.com/p/274c363ffd7c


免責聲明!

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



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