Maven 配置中的倉庫和鏡像

原文地址:https://alphahinex.github.io/2024/11/17/maven-repositories-and-mirrors/


description: "下載依賴不迷路"
date: 2024.11.17 10:34
categories:
- Java
tags: [Java, Maven]
keywords: repository, profile, mirror, settings.xml, pom, nexus, central


一些概念

倉庫(Repository)

Maven 中,倉庫(Repository)是指存放 pomjar 等文件的地方勋桶,分為本地倉庫和遠(yuǎn)程倉庫觉啊。

本地倉庫(Local Repository)

本地倉庫是 Maven 在本地文件系統(tǒng)中的一個目錄,用于存儲 Maven 項目的構(gòu)建輸出、依賴庫帽借、插件等妓盲。默認(rèn)情況下,本地倉庫位于用戶目錄下的 .m2 目錄慧瘤〈饕眩可以在 settings.xml 配置文件中通過 <localRepository> 元素修改本地倉庫的默認(rèn)路徑。

遠(yuǎn)程倉庫(Remote Repository)

不在本地的倉庫锅减,都是遠(yuǎn)程倉庫糖儡,一般通過網(wǎng)絡(luò)訪問。遠(yuǎn)程倉庫大致分為以下幾類:

  • 中央倉庫(Central Repository):指由 Sonatype 公司維護(hù)的 Maven 官方倉庫怔匣,地址 https://repo.maven.apache.org/maven2 握联。
  • 插件倉庫(Plugin Repository):倉庫包含兩種主要類型的工件(artifact)。第一種是作為其他工件依賴項使用的工件每瞒。這些工件是中央倉庫中大多數(shù)工件金闽。另一種類型的工件是插件。Maven 插件本身是一種特殊類型的工件剿骨。因此代芜,插件倉庫可能會與其他倉庫分開。
  • 鏡像倉庫(Mirror Repository):鏡像倉庫是一個代理服務(wù)器浓利,用于加速 Maven 項目的依賴庫挤庇、插件等的下載钞速。鏡像倉庫會緩存被代理倉庫中的內(nèi)容,可以鏡像中央倉庫嫡秕,也可以鏡像其他類型的倉庫渴语。
  • 私有倉庫(Private Repository):私有倉庫一般是指非 Maven 官方維護(hù)的 Maven 倉庫,工件的發(fā)布流程較中央倉庫更加自由昆咽。最佳實踐是通過 Repository Manager 來搭建一個私有倉庫驾凶,如常見的 Sonatype Nexus OSS

Maven 中的相關(guān)配置

倉庫(Repository)

倉庫會按如下 順序 查詢配置文件掷酗,直到找到有效結(jié)果:

  1. 有效的 settings
    1. 全局 settings.xml${maven.home}/conf/settings.xml
    2. 用戶 settings.xml${user.home}/.m2/settings.xml
  2. 有效的本地 POM:
    1. 本地 pom.xml
    2. 父 POM调违,遞歸查找
    3. Super POM
  3. 依賴路徑中工件的有效的 POM

Profile

settings.xml 的配置中,倉庫 需要配置到 profiles 下泻轰。多個激活的 profile 中配置的倉庫翰萨,按照 profile 定義的順序 倒序 查詢,不按照激活 profile 的順序糕殉。例如在 settings.xml 中有如下配置:

<settings>
  ...
    <profiles>
        <profile>
            <id>no3</id>
            <repositories>
                <repository>
                    <id>repo3</id>
                    <url>https://repo3.com/maven2</url>
                </repository>
                <repository>
                    <id>repo4</id>
                    <url>https://repo4.com/maven2</url>
                </repository>
            </repositories>
        </profile>
        <profile>
            <id>no2</id>
            <repositories>
                <repository>
                    <id>repo2</id>
                    <url>https://repo2.com/repository/public</url>
                </repository>
            </repositories>
        </profile>
        <profile>
            <id>no1</id>
            <repositories>
                <repository>
                    <id>repo1</id>
                    <url>https://repo1.org/maven2</url>
                </repository>
            </repositories>
        </profile>
    </profiles>

    <activeProfiles>
        <activeProfile>no2</activeProfile>
        <activeProfile>no3</activeProfile>
        <activeProfile>no1</activeProfile>
    </activeProfiles>
    ...
</settings>

會優(yōu)先使用在 repo_no1 profile 中定義下載依賴使用的倉庫順序會是 repo1, repo2, repo3, repo4亩鬼。

可以使用 mvn help:effective-settingsmvn help:effective-pom -Dverbose 來查看包含配置文件的有效設(shè)置和本地構(gòu)建 POM,以便輕松查看它們的倉庫順序阿蝶。

鏡像(Mirror)

在從倉庫下載工件之前雳锋,會先應(yīng)用鏡像配置。

比如在 Super POM 中定義的 central 倉庫羡洁,在網(wǎng)絡(luò)受限環(huán)境可以使用 Nexus 搭建一個中央倉庫的代理服務(wù)玷过,然后通過鏡像配置將需要從中央倉庫地址下載的工件替換為使用 Nexus 的地址加速下載。

可以在 settings.xml 配置文件的 mirrors 標(biāo)簽內(nèi)配置鏡像倉庫筑煮,通過 mirrorOf 和倉庫 id 進(jìn)行關(guān)聯(lián)辛蚊,如:

<settings>
  ...
  <mirrors>
    <mirror>
      <id>internal-repository</id>
      <name>Maven Repository Manager running on repo.mycompany.com</name>
      <url>http://repo.mycompany.com/proxy</url>
      <mirrorOf>*,!repo1</mirrorOf>
    </mirror>
    <mirror>
      <id>foo-repository</id>
      <name>Foo</name>
      <url>http://repo.mycompany.com/foo</url>
      <mirrorOf>repo1</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>

上面配置為所有非 repo1 的倉庫配置了一個鏡像地址,為 repo1 倉庫配置了另一個鏡像地址真仲。更多用法可參閱 Using Mirrors for Repositories袋马。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市秸应,隨后出現(xiàn)的幾起案子虑凛,更是在濱河造成了極大的恐慌,老刑警劉巖软啼,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沿盅,死亡現(xiàn)場離奇詭異葬毫,居然都是意外死亡,警方通過查閱死者的電腦和手機制妄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門滑臊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事“竦” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵盅粪,是天一觀的道長。 經(jīng)常有香客問我悄蕾,道長票顾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任帆调,我火速辦了婚禮奠骄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘番刊。我一直安慰自己含鳞,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布芹务。 她就那樣靜靜地躺著蝉绷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枣抱。 梳的紋絲不亂的頭發(fā)上熔吗,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音佳晶,去河邊找鬼桅狠。 笑死,一個胖子當(dāng)著我的面吹牛轿秧,可吹牛的內(nèi)容都是我干的中跌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼菇篡,長吁一口氣:“原來是場噩夢啊……” “哼漩符!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驱还,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤陨仅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后铝侵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灼伤,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年咪鲜,在試婚紗的時候發(fā)現(xiàn)自己被綠了狐赡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡疟丙,死狀恐怖颖侄,靈堂內(nèi)的尸體忽然破棺而出鸟雏,到底是詐尸還是另有隱情,我是刑警寧澤览祖,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布孝鹊,位于F島的核電站,受9級特大地震影響展蒂,放射性物質(zhì)發(fā)生泄漏又活。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一锰悼、第九天 我趴在偏房一處隱蔽的房頂上張望柳骄。 院中可真熱鬧,春花似錦箕般、人聲如沸耐薯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曲初。三九已至,卻和暖如春杯聚,著一層夾襖步出監(jiān)牢的瞬間复斥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工械媒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留目锭,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓纷捞,卻偏偏與公主長得像痢虹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子主儡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容