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

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

 更新時(shí)間:2018年09月27日 14:30:23   作者:polly  
這篇文章主要介紹了淺談Maven 項(xiàng)目中依賴的搜索順序,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

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

依賴倉(cāng)庫(kù)的配置方式

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

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

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

分析依賴搜索順序

先從最簡(jiǎn)單開(kāi)始,慢慢增加配置,查看有什么變化。

準(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來(lái)測(cè)試依賴的搜索順序。

默認(rèn)情況

首先確保junit4.12不存在:

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

默認(rèn)情況下沒(méi)有配置任何倉(cāng)庫(kù),也就是說(shuō),既沒(méi)改 $M2_HOME/conf/settings.xml 也沒(méi)有添加 ~/.m2/settings.xml

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

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 中央倉(cāng)庫(kù)拉取的jar.

配置鏡像倉(cāng)庫(kù) 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

在日志中查看下載依賴的倉(cāng)庫(kù):

復(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中的倉(cāng)庫(kù) 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āng)庫(kù)地址無(wú)所謂,使用相同的地址也不影響測(cè)試。

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

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

在日志中查看下載依賴的倉(cāng)庫(kù):

復(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)

從顯示的倉(cāng)庫(kù)id可以看出:

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

配置全局profile倉(cāng)庫(kù) 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

在日志中查看下載依賴的倉(cāng)庫(kù):

復(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)

從顯示的倉(cāng)庫(kù)id可以看出:

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

配置項(xiàng)目profile倉(cāng)庫(kù) 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

在日志中查看下載依賴的倉(cāng)庫(kù):

復(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)

從顯示的倉(cāng)庫(kù)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

在日志中查看下載依賴的倉(cāng)庫(kù):

復(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)

從顯示的倉(cāng)庫(kù)id可以看出:

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

最后確認(rèn) local_repo 本地倉(cāng)庫(kù) ~/.m2/repository

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

只要 ~/.m2/repository 中包含依賴,無(wú)論怎么配置,都會(huì)優(yōu)先使用local本地倉(cāng)庫(kù)中的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

通過(guò)上面的比較得出完整的搜索鏈:

local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    Java中初始化塊詳解及實(shí)例代碼

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

    Spring使用注解存儲(chǔ)和讀取對(duì)象詳解

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

    Lombok 的@StandardException注解解析

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

    使用Logback設(shè)置property參數(shù)方式

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

    騰訊云部署javaWeb項(xiàng)目的實(shí)現(xiàn)步驟

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

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

    下面小編就為大家?guī)?lái)一篇servlet配置方法及其生命周期詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Java和Ceylon對(duì)象的構(gòu)造和驗(yàn)證

    Java和Ceylon對(duì)象的構(gòu)造和驗(yàn)證

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

    Java中HashTable和HashMap的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

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

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

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

最新評(píng)論