最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你弄懂Maven拉包(拉取依賴包)原理

 更新時間:2023年07月16日 16:00:23   作者:樹哥聊編程  
業(yè)務(wù)需求開發(fā)的時候,我們總是會遇到拉不到依賴包的情況,此時如果不清楚 Maven 拉取依賴包的原理,那么很可能找不到問題所在,今天小編就帶大家了解下 Maven 拉包的原理,讓你在遇到問題的時候能快速解決,需要的朋友可以參考下

三種倉庫

在 Maven 中,倉庫指的是存放代碼構(gòu)建的一個位置。從分類上來說,Maven 倉庫有兩種類型,分別是:

  • 本地倉庫(Local)
  • 遠(yuǎn)程倉庫(Remote)

本地倉庫,是存在于本地的一個倉庫,它用來緩存下載的依賴包。這樣就不用每次都通過網(wǎng)絡(luò)去拉取依賴包了,提高了依賴?yán)∷俣?,減輕了倉庫服務(wù)器的壓力。

遠(yuǎn)程倉庫,如其名字所述,其實(shí)位于遠(yuǎn)程服務(wù)器的一個倉庫。例如有些公司自己對外開放了一些 API,需要將這些 API 的依賴開放出去,這時候就可以將 API 的 Jar 包放到公司自己的遠(yuǎn)程倉庫中。公司的客戶可以通過連接該倉庫下載 Jar 包。例如你們公司開發(fā)了自己的基礎(chǔ)工具類,并將其打成了一個 Jar 包。此時你可以將該 Jar 包部署到公司自己的遠(yuǎn)程倉庫中,公司其他開發(fā)伙伴配置該遠(yuǎn)程倉庫,從而可以拉取到該 Jar 包依賴。

在網(wǎng)上其他資料中,還會提到 Maven 倉庫有另一個類型 —— 中央倉庫(Central)。但在我看來,中央倉庫其實(shí)是一個特殊的遠(yuǎn)程倉庫。 它的特殊之處在于,它是 Maven 官方提供的,其中包括了大量常用的庫,基本上大多數(shù)的依賴包都可以在這里找到。另外一個特殊之處在于,中央倉庫的地址是內(nèi)置在 Maven 源碼中的,即默認(rèn)會向中央倉庫拉取依賴,這個在后續(xù)的依賴搜索順序中會講到。

而我們經(jīng)常說的私服,其實(shí)也是一個特殊的遠(yuǎn)程倉庫,其特殊之處在于:它只對公司內(nèi)部開放,方便存放一些本團(tuán)隊創(chuàng)建的開發(fā)庫。我們經(jīng)常說的阿里云 Maven 庫,其實(shí)就是一個遠(yuǎn)程倉庫,只不過其是對所有人開放罷了。

依賴搜索順序

弄懂了倉庫的類型,我們繼續(xù)來了解下依賴的搜索順序。

我們在開發(fā)過程中找不到依賴包,有多種原因,例如:

  • 依賴包確實(shí)沒有放到遠(yuǎn)程倉庫
  • 倉庫配置有問題
  • 等等

為了弄清楚到底是什么原因?qū)е乱蕾囌也坏?,我們需要了?Maven 是如何找一個依賴的。簡單來說,Maven 搜索依賴的算法如下:

  • 首先,在本地倉庫搜索,如果找不到則繼續(xù)下一步。
  • 接著,在中央倉庫搜索,如果找不到則繼續(xù)下一步。
  • 最后,在遠(yuǎn)程倉庫中搜索,如果找不到則拋出錯誤。如果沒有設(shè)置遠(yuǎn)程倉庫,那么拋出錯誤。如果找到了依賴,那么就下載到本地倉庫緩存。

簡單地說,Maven 搜索遵循簡單的順序 —— 本地倉庫 -> 中央倉庫 -> 遠(yuǎn)程倉庫。弄明白了這個依賴搜索順序,可以幫助我們更好地排查問題。但這可能還不夠,我們還需要搞清楚 Maven setting.xml 中的一些配置信息,從而可以排查是否是配置出現(xiàn)了問題。例如:有時候我們配置了 mirror 鏡像,會把對某個倉庫的請求轉(zhuǎn)發(fā)到另一個倉庫,這時候你要是不懂 mirror 配置,你就找不到問題所在了。

配置信息

關(guān)于倉庫的一些常見的配置項(xiàng)有:

  • repositories
  • mirror
  • server
  • 等等

下面我們將一個個講解他們的作用。

repositories 標(biāo)簽

repositories 標(biāo)簽用于定義遠(yuǎn)程倉庫,其配置范例如下所示:

<repositories>
	<repository>
        <!--公司鏡像的唯一標(biāo)識,這個配置要注意,不能與mirrorOf配置的相同,不然會被攔截,重定向到外網(wǎng)的鏡像倉庫 -->
        <id>nexus</id>
        <!--倉庫描述,隨意寫 -->
        <name>xxxx</name>
        <!-- 公司私有倉庫地址,這個很重要不能錯-->
        <url>http://xxx:8081/nexus/content/groups/public</url>
        <!-- 是否開啟 releases 包的下載及更新策略 -->
        <releases>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </releases>
        <!-- 是否開啟 snapshots 包的下載及更新策略 -->
        <snapshots>
            <enabled>false</enabled>
            <checksumPolicy>warn</checksumPolicy>
        </snapshots>
        <layout>default</layout>
	</repository>
 </repositories>

repositories 標(biāo)簽既可以在 setting.xml 文件配置,也可以在 pom.xml 文件中配置。Maven 在拉取依賴的時候,是按照聲明的順序從上到下去對應(yīng)的遠(yuǎn)程倉庫拉取依賴的。

mirror 標(biāo)簽

mirror 標(biāo)簽用于定義倉庫鏡像,其相當(dāng)于一個攔截器。當(dāng) mirror 的 mirrorOf 值與 repository 的 id 相同時,repository 定義的倉庫會被攔截,轉(zhuǎn)而使用 mirror 中定義的倉庫地址。配置范例如下:

<!--使用xx公司私有倉庫替換Maven默認(rèn)的中央倉庫 -->
<mirrors>
    <mirror>
        <!--自己公司的鏡像的唯一標(biāo)識,在mirror標(biāo)簽中,其實(shí)沒啥用:如xiaoyaziyun -->
        <id>xiaoyaziyun</id>   
        <!--倉庫描述,隨意寫 -->
        <name>xx公司私有倉庫地址</name> 
        <!--xx公司私有倉庫地址,這個很重要不能錯-->
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <!--`central`為Maven中央倉庫的標(biāo)識,替換Maven源碼內(nèi)默認(rèn)的是中央倉庫地址-->
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

如上圖配置所示,Maven 會用 http://maven.aliyun.com/nexus/content/groups/public/ 這個倉庫鏡像替換 Maven 中央倉庫,其中 central 是 Maven 中央倉庫的 ID 標(biāo)識。我們經(jīng)常說用阿里云的 Maven 倉庫可以提速,其實(shí)就是使用這種方法實(shí)現(xiàn)的。

server 標(biāo)簽

大部分遠(yuǎn)程倉庫無須認(rèn)證就可以訪問,但我們自己搭建的 Maven 倉庫,處于安全方面的考慮,我們會設(shè)置訪問權(quán)限。此時,我們需要在 setting.xml 文件中配置 server標(biāo)簽。配置示例如下代碼所示:

<settings>
    <!--配置遠(yuǎn)程倉庫認(rèn)證信息-->
     <servers>
        <server>
             <id>shuyi-tech-repo</id>
             <username>admin</username>
             <password>admin123</password>
         </server>
     </servers>
</settings>

上面的配置為 repository id 為 shuyi-tech-repo 的遠(yuǎn)程倉庫配置了用戶名和密碼,其中用戶名為 admin,密碼為 admin123。這里通過 server.idreposiroty.id 標(biāo)簽將認(rèn)證信息與倉庫綁定在一起,因此在配置的時候需要保持這兩個信息一致,否則可能導(dǎo)致訪問失敗。

其他標(biāo)簽

  • proxy 標(biāo)簽:服務(wù)器不能直接訪問外網(wǎng)時需要設(shè)置的代理服務(wù),不常用。
  • profiles 標(biāo)簽:上面提到mirror,配置多個只會一個有效,如果需要多倉庫配置,可以在profiles節(jié)點(diǎn)下配置多個profile,但是配置需要激活,特別麻煩,也不常用。

配置文件優(yōu)先級

對于 Maven 來說,我們會看到有多個配置文件:

  • 項(xiàng)目 pom.xml 文件
  • .m2/settings.xml 文件
  • Maven 安裝目錄 /conf/settings.xml 文件

如果一個配置同時存在于多個位置,那么到底以哪個為準(zhǔn)呢?簡單地說,這幾個配置文件的優(yōu)先級是怎樣的呢?如果沒搞懂這個問題,那么我們排查問題的時候可能會一團(tuán)糟。

其實(shí)三者的優(yōu)先級是 pom.xml >/用戶/.m2/settings.xml>/maven安裝目錄/conf/settings.xml。如果要設(shè)置全局 Maven 倉庫配置,需要在 Maven 安裝目錄 /conf 下找到 settings.xml 來修改。

以上就是一文帶你弄懂Maven拉包(拉取依賴包)原理的詳細(xì)內(nèi)容,更多關(guān)于Maven拉包原理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 在IDEA中啟動 Spring Boot 項(xiàng)目時加參數(shù)的詳細(xì)過程

    在IDEA中啟動 Spring Boot 項(xiàng)目時加參數(shù)的詳細(xì)過程

    本文將詳細(xì)介紹在IDEA中為Spring Boot啟動項(xiàng)目加參數(shù)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-09-09
  • Java主流壓縮解壓工具對比、用法與選取詳解

    Java主流壓縮解壓工具對比、用法與選取詳解

    開發(fā)過程中可能會用到壓縮文件的需求,下面這篇文章主要給大家介紹了關(guān)于Java主流壓縮解壓工具對比、用法與選取的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Java內(nèi)存模型相關(guān)知識總結(jié)

    Java內(nèi)存模型相關(guān)知識總結(jié)

    這篇文章主要介紹了Java內(nèi)存模型相關(guān)知識總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Java中方法重載與重寫的區(qū)別與避坑指南

    Java中方法重載與重寫的區(qū)別與避坑指南

    在 Java 基礎(chǔ)面試中,重載(Overload)和重寫(Override)是必考知識點(diǎn);在實(shí)際開發(fā)中,二者也是實(shí)現(xiàn)多態(tài)、代碼復(fù)用、業(yè)務(wù)擴(kuò)展的核心基礎(chǔ),本文給大家介紹了Java中方法重載與重寫的區(qū)別與避坑指南,需要的朋友可以參考下
    2026-05-05
  • spring cloud將spring boot服務(wù)注冊到Eureka Server上的方法

    spring cloud將spring boot服務(wù)注冊到Eureka Server上的方法

    本篇文章主要介紹了spring cloud將spring boot服務(wù)注冊到Eureka Server上的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • java使用poi讀取doc和docx文件的實(shí)現(xiàn)示例

    java使用poi讀取doc和docx文件的實(shí)現(xiàn)示例

    這篇文章主要介紹了java使用poi讀取doc和docx文件的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • RestTemplate調(diào)用POST和GET請求示例詳解

    RestTemplate調(diào)用POST和GET請求示例詳解

    這篇文章主要為大家介紹了RestTemplate調(diào)用POST和GET請求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Spring純Java配置集成kafka代碼實(shí)例

    Spring純Java配置集成kafka代碼實(shí)例

    這篇文章主要介紹了Spring純Java配置集成kafka代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • 不調(diào)用方法實(shí)現(xiàn)hutool導(dǎo)出excel圖片示例詳解

    不調(diào)用方法實(shí)現(xiàn)hutool導(dǎo)出excel圖片示例詳解

    這篇文章主要為大家介紹了不調(diào)用方法實(shí)現(xiàn)hutool導(dǎo)出excel圖片示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 使用Java 實(shí)現(xiàn)一個“你畫手機(jī)猜”的小游戲

    使用Java 實(shí)現(xiàn)一個“你畫手機(jī)猜”的小游戲

    這篇文章主要介紹了使用Java 實(shí)現(xiàn)一個“你畫手機(jī)猜”的小游戲,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09

最新評論

含山县| 建宁县| 齐河县| 海林市| 黄浦区| 紫阳县| 班玛县| 顺义区| 名山县| 马山县| 和林格尔县| 丰宁| 莱芜市| 特克斯县| 灌南县| 莲花县| 兴山县| 南汇区| 玉环县| 乐亭县| 屯留县| 手游| 平罗县| 察隅县| 乌鲁木齐市| 湖北省| 伊春市| 额敏县| 山丹县| 新安县| 吴桥县| 姜堰市| 舟曲县| 甘肃省| 陇川县| 彭州市| 深州市| 罗定市| 江西省| 兰州市| 富民县|