</mirrorOf> Maven
在 Maven 的镜像配置中,* 和 central 的核心区别在于 镜像的作用范围。以下是详细对比:
- central
作用范围
仅替代 Maven 中央仓库(即默认的 central 仓库,对应 https://repo.maven.apache.org/maven2/)。
典型场景
你希望从某个镜像(如阿里云、腾讯云)加速中央仓库的下载,但其他仓库(如私有仓库、JCenter 等)仍保持原样。
示例
xml
Copy
aliyun-central
https://maven.aliyun.com/repository/public
central
Run HTML
所有对 central 的请求会被重定向到阿里云,但其他仓库(如 my-company-repo)不受影响。
- *
作用范围
替代 所有仓库(包括 central、自定义仓库、第三方仓库等)。
典型场景
你希望所有仓库请求都通过一个统一的镜像(如企业内部私服 Nexus/Artifactory)代理。
示例
xml
Copy
internal-nexus
http://nexus.mycompany.com/repository/maven-public/
*
Run HTML
无论 Maven 尝试从哪个仓库下载依赖,都会被重定向到 internal-nexus。
关键区别
配置 作用范围 风险提示
central 仅中央仓库 安全,仅影响中央仓库的下载。
所有仓库 高风险!可能覆盖其他仓库(如私有仓库、第三方仓库),导致依赖下载失败。
为什么慎用 ?
覆盖所有仓库
如果镜像仓库(如阿里云)没有某个依赖(如企业内部私有库),Maven 会尝试从镜像仓库下载,最终失败。
配置冲突
如果存在多个镜像配置,* 的镜像会优先匹配所有仓库请求,可能导致其他镜像失效。
正确使用 * 的场景
仅当满足以下条件时使用:
镜像仓库是 全量代理(如企业内部私服 Nexus/Artifactory,已聚合所有仓库)。
确保镜像仓库包含所有需要的依赖(包括私有库、第三方库)。
高级用法:通配符排除
可以通过 ! 排除特定仓库,避免镜像覆盖:
xml
Copy
internal-nexus
http://nexus.mycompany.com/repository/maven-public/
*,!my-private-repo
Run HTML
表示镜像所有仓库,但排除 ID 为 my-private-repo 的仓库。
验证镜像匹配
通过 Maven 调试日志查看实际生效的仓库:
bash
Copy
mvn dependency:resolve -X
在日志中搜索 Downloading from,确认依赖是否从预期的镜像下载。
总结
场景 推荐配置
仅加速中央仓库 central
统一代理所有仓库(全量镜像)
排除特定仓库 ,!repo-id
尽量明确指定镜像范围,避免使用 * 导致意外问题!