淺談Maven項(xiàng)目中依賴的搜索順序

網(wǎng)上有很多關(guān)于maven項(xiàng)目中mirror、profile、repository的搜索順序的文章,說法不一。官方文檔并沒有找到相關(guān)的說明,鑒于此,我抽時(shí)間做了一個(gè)驗(yàn)證。

為積石山保安族東鄉(xiāng)族等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及積石山保安族東鄉(xiāng)族網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、積石山保安族東鄉(xiāng)族網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

依賴倉庫的配置方式

maven項(xiàng)目使用的倉庫一共有如下幾種方式:

  1. 中央倉庫,這是默認(rèn)的倉庫
  2. 鏡像倉庫,通過 sttings.xml 中的 settings.mirrors.mirror 配置
  3. 全局profile倉庫,通過 settings.xml 中的 settings.repositories.repository 配置
  4. 項(xiàng)目倉庫,通過 pom.xml 中的 project.repositories.repository 配置
  5. 項(xiàng)目profile倉庫,通過 pom.xml 中的 project.profiles.profile.repositories.repository 配置
  6. 本地倉庫

如果所有配置都存在,依賴的搜索順序就會(huì)變得異常復(fù)雜。

分析依賴搜索順序

先從最簡單開始,慢慢增加配置,查看有什么變化。

準(zhǔn)備測(cè)試環(huán)境

安裝jdk、maven。

使用如下命令創(chuàng)建測(cè)試項(xiàng)目:

復(fù)制代碼 代碼如下:
yes | mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp  -DinteractiveMode=true -DgroupId=com.pollyduan -DartifactId=myweb -Dversion=1.0 -Dpackage=com.pollyduan

創(chuàng)建完成后,為了避免后續(xù)測(cè)試干擾,先執(zhí)行一次compile。

cd myweb
mvn compile

最后,修改 pom.xml 文件,將 junit版本號(hào)改為 4.12 。我們要使用這個(gè)jar來測(cè)試依賴的搜索順序。

默認(rèn)情況

首先確保junit4.12不存在:

rm -rf ~/.m2/repository/junit/junit/4.12

默認(rèn)情況下沒有配置任何倉庫,也就是說,既沒改 $M2_HOME/conf/settings.xml 也沒有添加 ~/.m2/settings.xml

執(zhí)行編譯,查看日志中拉取junit的倉庫。

mvn compile

...
Downloaded from central: https://repo.maven.apache.org/maven2/junit/junit/4.12/junit-4.12.pom (24 kB at 11 kB/s)

可以看出,默認(rèn)是從 central 中央倉庫拉取的jar.

配置鏡像倉庫 settings_mirror

創(chuàng)建 ~/.m2/setttings.xml ,內(nèi)容如下:

<settings>
 <mirrors>
  <mirror>
   <id>settings_mirror</id>
   <url>https://maven.aliyun.com/repository/public</url>
   <mirrorOf>central</mirrorOf>
  </mirror>
 </mirrors>
</settings>

重新測(cè)試:

rm -rf ~/.m2/repository/junit/junit/4.12
mvn compile

在日志中查看下載依賴的倉庫:

復(fù)制代碼 代碼如下:
Downloaded from settings_mirror: https://maven.aliyun.com/repository/public/junit/junit/4.12/junit-4.12.pom (24 kB at 35 kB/s)

可以看出,是從 settings_mirror 中下載的jar

結(jié)論:settings_mirror 的優(yōu)先級(jí)高于 central

配置pom中的倉庫 pom_repositories

在 project 中增加如下配置:

<repositories>
 <repository>
  <id>pom_repositories</id>
  <name>local</name>
  <url>http://10.18.29.128/nexus/content/groups/public/</url>
  <releases>
   <enabled>true</enabled>
  </releases>
  <snapshots>
   <enabled>true</enabled>
  </snapshots>
 </repository>
</repositories>

由于我們改變了id的名字,所以倉庫地址無所謂,使用相同的地址也不影響測(cè)試。

執(zhí)行測(cè)試:

rm -rf ~/.m2/repository/junit/junit/4.12
mvn compile

在日志中查看下載依賴的倉庫:

復(fù)制代碼 代碼如下:
Downloaded from pom_repositories: http://10.18.29.128/nexus/content/groups/public/junit/junit/4.12/junit-4.12.pom (24 kB at 95 kB/s)

從顯示的倉庫id可以看出:

  • jar 是從 pom_repositories 中下載的。
  • pom_repositories 優(yōu)先級(jí)高于 settings_mirror

配置全局profile倉庫 settings_profile_repo

在 ~/.m2/settings.xml 中 settings 的節(jié)點(diǎn)內(nèi)增加:

<profiles>
 <profile>
 <id>s_profile</id>
 <repositories>
  <repository>
   <id>settings_profile_repo</id>
   <name>netease</name>
   <url>http://mirrors.163.com/maven/repository/maven-public/</url>
   <releases>
    <enabled>true</enabled>
   </releases>
   <snapshots>
    <enabled>true</enabled>
   </snapshots>
  </repository>
 </repositories>
 </profile>
</profiles>

執(zhí)行測(cè)試:

rm -rf ~/.m2/repository/junit/junit/4.12
mvn compile -Ps_profile

在日志中查看下載依賴的倉庫:

復(fù)制代碼 代碼如下:
Downloaded from settings_profile_repo: http://mirrors.163.com/maven/repository/maven-public/junit/junit/4.12/junit-4.12.pom (24 kB at 63 kB/s)

從顯示的倉庫id可以看出:

  • jar 是從 settings_profile_repo 中下載的。
  • settings_profile_repo 優(yōu)先級(jí)高于 settings_mirror。
  • settings_profile_repo 優(yōu)先級(jí)高于 pom_repositories 。

配置項(xiàng)目profile倉庫 pom_profile_repo

<profiles>
 <profile>
  <id>p_profile</id>
  <repositories>
   <repository>
    <id>pom_profile_repo</id>
    <name>local</name>
    <url>http://10.18.29.128/nexus/content/groups/public/</url>
    <releases>
     <enabled>true</enabled>
    </releases>
    <snapshots>
     <enabled>true</enabled>
    </snapshots>
   </repository>
  </repositories>
 </profile>
</profiles>

執(zhí)行測(cè)試:

rm -rf ~/.m2/repository/junit/junit/4.12
mvn compile -Ps_profile,p_profile
mvn compile -Pp_profile,s_profile

在日志中查看下載依賴的倉庫:

復(fù)制代碼 代碼如下:
Downloaded from settings_profile_repo: http://mirrors.163.com/maven/repository/maven-public/junit/junit/4.12/junit-4.12.pom (24 kB at 68 kB/s)

從顯示的倉庫id可以看出:

  • jar 是從 settings_profile_repo 中下載的
  • settings_profile_repo 優(yōu)先級(jí)高于 pom_profile_repo

進(jìn)一步測(cè)試:

rm -rf ~/.m2/repository/junit/junit/4.12
mvn compile -Pp_profile

在日志中查看下載依賴的倉庫:

復(fù)制代碼 代碼如下:
Downloaded from pom_profile_repo: http://10.18.29.128/nexus/content/groups/public/junit/junit/4.12/junit-4.12.pom (24 kB at 106 kB/s)

從顯示的倉庫id可以看出:

  • jar 是從 settings_profile_repo 中下載的
  • pom_profile_repo 優(yōu)先級(jí)高于 pom_repositories

最后確認(rèn) local_repo 本地倉庫 ~/.m2/repository

這不算測(cè)試了,只是一個(gè)結(jié)論,可以任意測(cè)試。

只要 ~/.m2/repository 中包含依賴,無論怎么配置,都會(huì)優(yōu)先使用local本地倉庫中的jar.

最終結(jié)論

  • settings_mirror 的優(yōu)先級(jí)高于 central
  • settings_profile_repo 優(yōu)先級(jí)高于 settings_mirror
  • settings_profile_repo 優(yōu)先級(jí)高于 pom_repositories
  • settings_profile_repo 優(yōu)先級(jí)高于 pom_profile_repo
  • pom_profile_repo 優(yōu)先級(jí)高于 pom_repositories
  • pom_repositories 優(yōu)先級(jí)高于 settings_mirror

通過上面的比較得出完整的搜索鏈:

local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

名稱欄目:淺談Maven項(xiàng)目中依賴的搜索順序
網(wǎng)站鏈接:http://bm7419.com/article44/jjdhhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、面包屑導(dǎo)航靜態(tài)網(wǎng)站、搜索引擎優(yōu)化微信公眾號(hào)、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)