欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Maven 項目中依賴的搜索順序

 更新時間:2018年09月27日 14:30:23   作者:polly  
這篇文章主要介紹了淺談Maven 項目中依賴的搜索順序,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

網上有很多關于maven項目中mirror、profile、repository的搜索順序的文章,說法不一。官方文檔并沒有找到相關的說明,鑒于此,我抽時間做了一個驗證。

依賴倉庫的配置方式

maven項目使用的倉庫一共有如下幾種方式:

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

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

分析依賴搜索順序

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

準備測試環(huán)境

安裝jdk、maven。

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

復制代碼 代碼如下:
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ù)測試干擾,先執(zhí)行一次compile。

cd myweb
mvn compile

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

默認情況

首先確保junit4.12不存在:

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

默認情況下沒有配置任何倉庫,也就是說,既沒改 $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)

可以看出,默認是從 central 中央倉庫拉取的jar.

配置鏡像倉庫 settings_mirror

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

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

重新測試:

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

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

復制代碼 代碼如下:
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

結論:settings_mirror 的優(yōu)先級高于 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的名字,所以倉庫地址無所謂,使用相同的地址也不影響測試。

執(zhí)行測試:

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

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

復制代碼 代碼如下:
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)先級高于 settings_mirror

配置全局profile倉庫 settings_profile_repo

在 ~/.m2/settings.xml 中 settings 的節(jié)點內增加:

<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í)行測試:

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

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

復制代碼 代碼如下:
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)先級高于 settings_mirror。
  • settings_profile_repo 優(yōu)先級高于 pom_repositories 。

配置項目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í)行測試:

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

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

復制代碼 代碼如下:
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)先級高于 pom_profile_repo

進一步測試:

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

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

復制代碼 代碼如下:
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)先級高于 pom_repositories

最后確認 local_repo 本地倉庫 ~/.m2/repository

這不算測試了,只是一個結論,可以任意測試。

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

最終結論

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

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

local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java 添加、讀取和刪除 Excel 批注的操作代碼

    Java 添加、讀取和刪除 Excel 批注的操作代碼

    這篇文章主要介紹了Java 添加、讀取和刪除 Excel 批注的操作方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Java中初始化塊詳解及實例代碼

    Java中初始化塊詳解及實例代碼

    這篇文章主要介紹了Java中初始化塊詳解及實例代碼的相關資料,在Java中,有兩種初始化塊:靜態(tài)初始化塊和非靜態(tài)初始化塊,需要的朋友可以參考下
    2017-03-03
  • Spring使用注解存儲和讀取對象詳解

    Spring使用注解存儲和讀取對象詳解

    這篇文章主要給大家介紹了關于Spring如何通過注解存儲和讀取對象的相關資料,文中通過實例代碼介紹的非常詳細,有一定的參考價值,需要的朋友可以參考下
    2023-04-04
  • Lombok 的@StandardException注解解析

    Lombok 的@StandardException注解解析

    @StandardException 是一個實驗性的注解,添加到 Project Lombok 的 v__1.18.22 版本中,在本教程中,我們將使用 Lombok 的 @StandardException 注解自動生成異常類型類的構造函數,需要的朋友可以參考下
    2023-05-05
  • 使用Logback設置property參數方式

    使用Logback設置property參數方式

    這篇文章主要介紹了使用Logback設置property參數方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 騰訊云部署javaWeb項目的實現步驟

    騰訊云部署javaWeb項目的實現步驟

    本文主要介紹了騰訊云部署javaWeb項目的實現步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • servlet配置方法及其生命周期詳解

    servlet配置方法及其生命周期詳解

    下面小編就為大家?guī)硪黄猻ervlet配置方法及其生命周期詳解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java和Ceylon對象的構造和驗證

    Java和Ceylon對象的構造和驗證

    這篇文章主要為大家詳細介紹了Java和Ceylon對象的構造和驗證,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Java中HashTable和HashMap的區(qū)別_動力節(jié)點Java學院整理

    Java中HashTable和HashMap的區(qū)別_動力節(jié)點Java學院整理

    HashTable和HashMap主要的區(qū)別有:線程安全性,同步(synchronization),以及速度。接下來通過本文給大家簡單介紹下HashTable和HashMap的區(qū)別,需要的的朋友參考下吧
    2017-04-04
  • 詳解JAVA 字節(jié)流和字符流

    詳解JAVA 字節(jié)流和字符流

    這篇文章主要介紹了JAVA 字節(jié)流和字符流的的相關資料,文中講解非常的細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06

最新評論