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的中央倉庫)。
- <profiles>
- <profile>
- <
- <repositories>
- <repository>
- <id>xxx</id>
- <name>111</name>
- <url>http://localhost:8081/nexus/content/groups/public/</url>
- <snapshots>
- <enabled>true</enabled
- </snapshots>
- <releases>
- <enabled>true</enabled>
- </releases>
- <layout>default</layout>
- </repository>
- </repositories>
- </profile>
- </profiles>
- <activeProfiles>
- <!--激活了才生效-->
- <activeProfile>nexusProfile</activeProfile>
- </activeProfiles>
配置映象後,下載依賴包的流程為:
如果沒有把預設的central倉庫配置到映象裡,
- <mirror>
- <id>mirrorId</id>
- <!--表示訪問哪些工廠時需要使用映象-->
- <mirrorOf>xxx</mirrorOf>
- <name>Human Readable Name for this Mirror.</name>
- <url>http://localhost:8081/nexus/content/groups/public/</url>
- </mirror>
流程如下:
(1)配置了映象後,當要下載依賴時,第一步:找到setting.xml中啟用的profile下repository裡id為xxx的配置,而xxx已經配置在裡映象裡
(2)這時會去到到映象裡的url(倉庫)裡下載依賴
(3)當發現映象裡配置的url(倉庫)裡下載不到對應的依賴時,會自動去找到maven中預設的id為central,url為中央倉庫地址的repository配置,因為central沒有配置在映象中,所以此時可以直接去到maven中央倉庫下載依賴包。
結果如下圖所示:
如果已經把預設的central倉庫配置到映象裡,
- </pre><prename="code"class="html"><mirror>
- <id>mirrorId</id>
- <!--表示訪問哪些工廠時需要使用映象-->
- <!--<mirrorOf>xxx,central</mirrorOf> -->
- <mirrorOf>*</mirrorOf><!--一般用*號-->
- <name>Human Readable Name for this Mirror.</name>
- <url>http://localhost:8081/nexus/content/groups/public/</url>
- </mirror>
流程如下:
(1)配置了映象後,當要下載依賴時,第一步:找到setting.xml中啟用的profile下repository裡id為xxx的配置,而xxx已經配置在裡映象裡
(2)這個時候會去到到映象裡的url(倉庫)裡下載依賴
(3)當發現映象裡配置的url(倉庫)裡下載不到對應的依賴時,會自動去找到maven中預設的id為central,url為中央倉庫地址的repository配置,
(4)此時central配置在映象中,所以這次是去到到映象裡的url(倉庫)裡下載依賴了。而不會去訪問maven中央倉庫了。
結果如下圖: