Java项目每次构建都要从远程仓库拉依赖。直接连海外的Maven Central时,国内网络经常出现下载慢、超时或中途断开,流水线跟着排队。阿里云Maven仓库就是为这类情况准备的:它可以当公共镜像加速下载,也能托管团队自己的私有构件。下面说清楚它能做什么,settings.xml里具体改哪里,以及一个团队是怎么把它落到CI里的。

阿里云Maven仓库提供什么
阿里云Maven仓库主要有两部分。一部分是公共镜像,同步Maven中央仓库的内容,本地构建把它设成默认源就能用。另一部分是私有仓库,由阿里云云效的制品管理功能提供,团队可以在里面发布自己的JAR包,并分别控制谁能读、谁能上传。
公共镜像的常用地址是 https://maven.aliyun.com/repository/public,中央仓库的镜像地址是 https://maven.aliyun.com/repository/central。仓库列表和路径会调整,正式配置前请以阿里云官方文档为准,别直接照抄旧教程里的地址。
在Maven中配置公共镜像
Maven读取镜像配置的入口是 settings.xml,用户级文件一般在 ~/.m2/settings.xml。真正要写的是 mirror 元素:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
mirrorOf 这一项最容易写错。它应该明确是 central,只替换中央仓库的请求。如果写成 *,所有仓库请求都会被转到镜像上,之后接入的私有仓库就访问不了,排查时很容易误以为是网络问题。改完后执行 mvn help:effective-settings,看看最终生效的是哪份配置。
Gradle项目怎么接
Gradle项目在 build.gradle 或 settings.gradle 的仓库列表里加上阿里云地址,放在 mavenCentral() 前面。依赖解析会先查国内镜像,找不到再回到原始源。Kotlin DSL的写法一样,只是语法换成对应形式。
一个CI慢问题的实际处理
某中型后端团队有十几个Spring Boot服务,共用一套Jenkins流水线。每次构建都在干净容器里重新下载依赖,平均耗时超过十分钟,大部分时间都花在下载上。开发人员常常因为一次超时就得把整条流水线重跑。
团队做了三件事。第一,所有项目的Maven配置里加入阿里云公共镜像,并把 mirrorOf 限定为 central。第二,把 settings.xml 预置在Jenkins共享镜像里,不再让每个服务各自维护一份。第三,把本地 .m2 目录挂载为构建缓存。调整后依赖基本在国内网络内完成,因超时重跑的情况少了很多。团队没有统计精确的耗时数字,能确定的是构建失败率下降,开发人员也反映等待时间变短了。
私有仓库的发布和访问控制
公共鉴权SDK、通用日志库这类内部组件,不适合放进公共镜像,应该发布到云效的私有Maven仓库。发布前要在项目里配置 distributionManagement,再把访问凭证填进 settings.xml 的 server 元素。这里有三点要留意:
- 凭证:用个人访问令牌或服务账号,别把用户名和密码写进 pom.xml 或代码仓库。CI里的凭证放到Jenkins凭据库或环境变量中,构建日志里也不要打印出来。
- 权限:开发人员一般只需要读取权限,上传权限只给发布流水线的账号。这样开发机上的误操作就不会直接动到发布包。
- 版本:正式版本一旦发布就不要覆盖,别人的构建结果都依赖它。快照版本可以设置较短的保留期,否则仓库体积会一直涨。
几个容易踩的坑
JCenter已于2021年停止服务,如果项目还指向它,依赖解析迟早会出问题,需要迁移到Maven Central镜像。这类旧配置常藏在老项目的pom.xml或Gradle脚本里,改镜像时顺手搜一下。
所有仓库地址都应该使用HTTPS,避免依赖在传输过程中被篡改。
镜像只改变下载来源,不保证版本内容不变。团队仍然要靠依赖版本锁定和校验和机制,才能让构建可复现。
依赖下载报错时,先检查 settings.xml 里的镜像配置是否写对,确认无误后再删除本地 .m2 中可能损坏的文件。直接清缓存放在最后一步,不要一上来就做。
什么情况下值得这样用
如果团队主要在国内网络环境里开发和构建,阿里云Maven仓库能明显减少依赖下载的等待。如果还要托管内部构件,云效私有仓库可以把发布和读取权限放在同一个平台里管。两者一起用,构建速度和依赖管理一般都能好转。