| 概念 | 作用 | 生效範圍 | 備選策略 |
|---|---|---|---|
| repository | 直接聲明遠程倉庫地址 | 當前 POM / settings.xml profile | 順序嘗試:配置多個時按順序依次下載,成功即停止 |
| mirror | 代理/鏡像指定倉庫請求 | 全局(settings.xml),攔截所有匹配倉庫請求 | 備份切換:多鏡像僅在連接失敗時切換,不會因找不到包而嘗試下一個 |
<profiles>
<profile>
<id>aliyun</id>
<repositories>
<repository>
<id>aliyun</id>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>...</pluginRepositories>
</profile>
<profile>
<id>central</id>
<repositories>
<repository><id>central</id><url>https://repo.maven.apache.org/maven2</url>...</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>aliyun</activeProfile>
<activeProfile>central</activeProfile>
</activeProfiles>
Maven 會按 activeProfiles 順序依次嘗試下載。
<profile>
<id>multi-repo</id>
<repositories>
<repository><id>aliyun</id><url>...</url>...</repository>
<repository><id>central</id><url>...</url>...</repository>
<repository><id>private</id><url>https://nexus.company.com/repository/maven-public/</url>...</repository>
</repositories>
</profile>
<mirrors>
<mirror>
<id>aliyun-mirror</id>
<mirrorOf>central</mirrorOf> <!-- 只鏡像 central -->
<name>Aliyun Mirror</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
mirrorOf>*(鏡像所有倉庫)<mirror>
<id>dangerous</id>
<mirrorOf>*</mirrorOf> <!-- 攔截所有請求,包括私服、第三方 -->
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
後果:私服部署的內部構件、第三方倉庫的專有包全部無法解析,構建失敗。
<mirror><id>mirror1</id><mirrorOf>central</mirrorOf><url>https://mirror1.com</url></mirror>
<mirror><id>mirror2</id><mirrorOf>central</mirrorOf><url>https://mirror2.com</url></mirror>
只有 mirror1 連不上時才嘗試 mirror2;若 mirror1 連得上但缺包,構建直接失敗,不會嘗試 mirror2。
mirrorOf>central,不加 *。repository 指向私服,由私服代理中央、阿里雲、第三方、內部倉庫,統一緩存、統一權限、統一掃描——這才是企業級標準架構。Repository 是「選擇」,Mirror 是「攔截替換」。多倉庫場景下,Repository 順序嘗試機制遠優於 Mirror 備份機制。企業級項目請直接上私服,別在 Maven 這裡搞複雜邏輯。