Maven實戰(zhàn)之Maven倉庫

Maven實戰(zhàn)之Maven倉庫

Maven倉庫作用

倉庫,顧名思義就是存放物品的地方。在Maven中,我們可以將其倉庫理解為就是存放jar包的地方,在前面的小節(jié)中,我們提到了Maven的中央倉庫,該倉庫是Maven的默認倉庫,基本上包含了常見的Java開源庫的jar包及其相關(guān)信息。

倉庫的路徑

在前面的小節(jié)中,當需要使用一個依賴的時候,Maven要求我們必須提供其對應的坐標 ( groupId,ArtifactId,version 等信息 ),該信息除了區(qū)分不同的依賴外,很重要的一個作用就是標識自己在倉庫中對應的存放位置,Maven中倉庫的默認存放路徑為 GroupId/ArtifactId/version/ArtifactId-version-[classifier].extension,比如spring-core,它的坐標為

<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>

則其對應的路徑為org.springframework/spring-core/4.3.7/spring-core.4.3.7.RELEASE.jar,其中的extension來自于package中的聲明,默認為jar

倉庫的類型

在Maven中,只有兩種類型的倉庫:本地倉庫、遠程倉庫,如果進行細分的話,遠程倉庫還可以進一步劃分為:中央倉庫、私服、其他公共庫。本地倉庫以及中央倉庫、其他公共倉庫的概念顯而易見,私服指的是一般公司自己搭建的內(nèi)部的倉庫,不對外開放,同時該倉庫可以作為公司內(nèi)部的公共倉庫,并且只由該私服倉庫訪問其他倉庫,這樣做可以減少公司的對外帶寬,提高效率,同時減少對其他倉庫的訪問。

配置遠程倉庫

當Maven在構(gòu)建的時候,發(fā)現(xiàn)本地倉庫缺少相對應的構(gòu)建的時候,就會從遠程倉庫中查詢、獲取該構(gòu)建,由于默認是中央倉庫,而有時候中央倉庫可能出現(xiàn)網(wǎng)絡(luò)問題或者我們需要的構(gòu)建不在中央倉庫中,這個時候配置其他遠程倉庫就很有必要了,配置方式如下:配置pom.xml

<project>
    ...
    <repositories><!--可以配置多個遠程倉庫-->
        <repository><!--配置一個倉庫-->
            <id>倉庫的ID</id><!--ID沒有其他要求,但該ID在本文件中應該唯一-->
            <name>倉庫的名字</name><!--用于開發(fā)人員識別--->
            <url>倉庫的地址</url><!--該地址很重要,是倉庫唯一的地址-->
            <snapshots><enable>false</enable></snapshots><!--不使用snapshot狀態(tài)的構(gòu)建-->
            <releases><enable>true</enable></releases><!--使用release狀態(tài)的構(gòu)建-->
        </repository>
   </repositories>
</project>

配置倉庫認證信息

有時候,有些遠程倉庫需要進行身份驗證,有時這是很有必要的,如在公司內(nèi)部,可能有些倉庫只允許特定的人員訪問,配置方式如下

注意,這里的配置是在setting.xml文件中配置,原因很顯然,pom.xml會隨著構(gòu)建的發(fā)布提交給其他用戶,這是比較危險的做法

<setting>
    ...
    <servers>
        <server>
        <!--這里的ID要與需要身份認證的倉庫中的ID保持一致,這也是為什么倉庫中ID需要保持唯一的原因之一-->
            <id>倉庫的ID</id>
            <username>用戶名</username>
            <password>密碼</password>
        </server>
    </servers>
</setting>

部署至遠程倉庫

有時候我們可能需要將構(gòu)建好的構(gòu)建部署到遠程倉庫中,供其他開發(fā)人員使用,配置的方式如下,pom.xml

<project>
    ...
    <distributionManagement>
        <repository>
        <!--ID唯一,一般來說需要部署的倉庫都需要驗證身份,所以還需要配置認證,方式見上面-->
            <id>要部署的倉庫的ID</id>
            <name>倉庫的名稱</name>
            <url>倉庫的地址</url>
        </repository>
    </distributionManagement>
</project>

當代碼編寫完成,通過測試之后,執(zhí)行命令mvn clean deploy就可以將其部署到對應的倉庫中,供其他開發(fā)者使用。

關(guān)于快照版本

需要存在的原因如下

  • 告知其他使用該構(gòu)建的開發(fā)者,該構(gòu)建屬于測試版,不建議在實際生產(chǎn)中使用

  • 方便Maven進行歸類管理,方便用戶構(gòu)建時進行選擇

倉庫解析依賴機制

在Maven中,依賴的解析方式如下:首先是檢查本地倉庫是否存在、存在則使用,不存在,則向默認的遠程倉庫或者私服查詢,如果有多個的話,先合并所有的遠程倉庫元信息 groupId/artifactId/maven-metadata.xml文件,然后選擇最合適的構(gòu)建,然后進行解析。

鏡像

鏡像,顧名思義,就是原來東西的一個復制,Maven倉庫的鏡像也是如此,如果一個倉庫A是另一個倉庫B的拷貝,則稱倉庫A是倉庫B的鏡像。鏡像倉庫的可以用于減緩目標倉庫的壓力,同時,也可以用于修改默認的遠程倉庫,配置方式如下setting.xml

<setting>
    ...
    <mirrors><!--配置多個鏡像倉庫-->
        <mirror><!--配置一個鏡像倉庫-->
            <id>倉庫ID</id>
            <name>倉庫名稱</name>
            <url>鏡像倉庫地址</url>
          <!--表示鏡像倉庫為原倉庫的鏡像,之后原倉庫的訪問會直接訪問鏡像倉庫-->
            <mirrorof>原倉庫地址</mirrorof>
          <!--可以使用*表示所有,則所有的訪問都會指向鏡像倉庫-->
        </mirror>
    </mirrors>
</setting>

倉庫搜索服務

有時候我們只知道某一個構(gòu)建的名稱或是組織等一些不足以表示該構(gòu)建坐標的信息,這個時候有兩種主要的解決方案

  1. 第一種是通過搜索引擎查找或者訪問該構(gòu)建的官網(wǎng)

  2. 第二種是通過已有的倉庫搜索服務,有幾個比較常用的倉庫搜索服務網(wǎng)站,如下

總結(jié)

在這一小節(jié)中,我們主要了解了Maven中倉庫的概念,倉庫的種類,配置遠程倉庫,配置倉庫認證信息,部署構(gòu)建到遠程倉庫中,倉庫依賴解析機制,鏡像倉庫,以及幾個常用的倉庫搜索服務,Maven的學習之路還在繼續(xù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • |-1-更新內(nèi)容[6.從倉庫解析依賴的機制(重要)] 1Maven倉庫作用 倉庫用來存儲所有項目使用到構(gòu)件,在ma...
    zlcook閱讀 6,464評論 0 25
  • 目前在看nexus私服章節(jié)的知識時需要用到倉庫與鏡像的知識,正好通過簡書把倉庫和鏡像章節(jié)的筆記整理一下 倉庫 ma...
    小煉君閱讀 1,420評論 0 48
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,653評論 19 139
  • 首先私服是一種衍生出來的特殊的Maven遠程倉庫,構(gòu)建私服的好處請看3.5私服 可以幫助大家建立私服的倉庫管理軟件...
    zlcook閱讀 10,827評論 0 32
  • 一一一海洋 ? 2009年對我來說是一個人生的轉(zhuǎn)折點,那時...
    帝王道閱讀 520評論 0 0

友情鏈接更多精彩內(nèi)容