1. 程式人生 > >maven下載jar包的流程及setting.xml配置映象

maven下載jar包的流程及setting.xml配置映象

前面已經講解了配置nexus共享倉庫。啟動了nexus服務後,本地倉庫下載jar包都是從nexus裡下載,如果nexus裡沒有,nexus會與maven的中央倉庫打交道,然後下載對應的依賴包。當關閉了nexus服務後,本地倉庫就會跳過nexus,直接去maven中央倉庫下載依賴包了。

如果我們不希望本地倉庫直接去maven中央倉庫下載,而必須要從nexus裡下載依賴包,如果nexus裡沒有對應的依賴包,就下載不了。

要實現這種效果,需要在setting裡配置映象(<mirror>),讓所有的倉庫都從這個映象的url(倉庫)中下載依賴。

setting裡配置了映象以後,本地倉庫就不再與nexus打交道了,而是直接與映象中配置的的url(倉庫)進行打交道。

這裡說明一下,不管是在pom.xml裡配置了<repositories>去指向nexus倉庫,還是在setting.xml裡配置<profile>去指向nexus倉庫,當從本地倉庫去下載依賴的時候,如果nexus裡找不到對應的依賴包,會預設的去maven倉庫裡下載。即使是nexus服務關閉了,本地倉庫還是會去maven中央倉庫下載對應依賴包。這是maven裡面的預設配置(maven-model-builder-3.3.3.jar裡pom-4.0.0.xml檔案配置了id為central的中央倉庫)。

  1. <profiles>
  2.     <profile>
  3.       <
    id>nexusProfile</id>
  4.       <repositories>
  5.         <repository>
  6.             <id>xxx</id>
  7.             <name>111</name>
  8.             <url>http://localhost:8081/nexus/content/groups/public/</url>
  9.             <snapshots>
  10.                 <enabled>true</enabled
    >
  11.             </snapshots>
  12.             <releases>
  13.                 <enabled>true</enabled>
  14.             </releases>
  15.             <layout>default</layout>
  16.         </repository>
  17.       </repositories>
  18.     </profile>
  19.   </profiles>
  20.     <activeProfiles>
  21.         <!--激活了才生效-->
  22.         <activeProfile>nexusProfile</activeProfile>
  23.     </activeProfiles>


配置映象後,下載依賴包的流程為:

如果沒有把預設的central倉庫配置到映象裡,

  1. <mirror>
  2.       <id>mirrorId</id>
  3.       <!--表示訪問哪些工廠時需要使用映象-->
  4.       <mirrorOf>xxx</mirrorOf>
  5.       <name>Human Readable Name for this Mirror.</name>
  6.       <url>http://localhost:8081/nexus/content/groups/public/</url>
  7.     </mirror>

流程如下:

(1)配置了映象後,當要下載依賴時,第一步:找到setting.xml中啟用的profile下repository裡id為xxx的配置,而xxx已經配置在裡映象裡

(2)這時會去到到映象裡的url(倉庫)裡下載依賴

(3)當發現映象裡配置的url(倉庫)裡下載不到對應的依賴時,會自動去找到maven中預設的id為central,url為中央倉庫地址的repository配置,因為central沒有配置在映象中,所以此時可以直接去到maven中央倉庫下載依賴包。

結果如下圖所示:


如果已經把預設的central倉庫配置到映象裡,

  1. </pre><prename="code"class="html"><mirror>
  2.       <id>mirrorId</id>
  3.       <!--表示訪問哪些工廠時需要使用映象-->
  4.       <!--<mirrorOf>xxx,central</mirrorOf> -->
  5.       <mirrorOf>*</mirrorOf><!--一般用*號-->
  6.       <name>Human Readable Name for this Mirror.</name>
  7.       <url>http://localhost:8081/nexus/content/groups/public/</url>
  8.     </mirror>

流程如下:

(1)配置了映象後,當要下載依賴時,第一步:找到setting.xml中啟用的profile下repository裡id為xxx的配置,而xxx已經配置在裡映象裡

(2)這個時候會去到到映象裡的url(倉庫)裡下載依賴

(3)當發現映象裡配置的url(倉庫)裡下載不到對應的依賴時,會自動去找到maven中預設的id為central,url為中央倉庫地址的repository配置,

(4)此時central配置在映象中,所以這次是去到到映象裡的url(倉庫)裡下載依賴了。而不會去訪問maven中央倉庫了。

結果如下圖: