阿里云maven库是阿里云开发者平台提供的Maven仓库服务,分为两部分。一部分是公共镜像,同步了Maven中央仓库的主要内容,也提供Gradle插件、Google等常用仓库的镜像地址,国内访问比直连快很多。另一部分是私有制品仓库,企业可以托管内部组件,控制发布和访问权限。

个人开发者用公共镜像就够了,不需要账号和密钥。团队如果有内部jar包要共享,再把私有仓库加进来,两者配合着用。
一次依赖下载慢的典型情况
下面是一个示意场景。某个电商后端团队有十几个Spring Boot微服务,每个服务大约依赖300个jar包。开发机直连中央仓库时,全量构建要八分钟左右,其中一半以上的时间花在下载依赖上。CI每次提交都要重新拉一遍,排队的时候更难受。
团队把Maven和Gradle的仓库地址统一切到阿里云镜像后,首次构建降到两分钟左右。后续构建命中本地缓存,基本只剩编译时间。具体数字取决于网络和项目规模,但依赖下载变快这个效果比较稳定。
Maven项目怎么配
建议直接改全局的settings.xml,这样本机所有Maven项目都生效,不用逐个去改pom.xml。步骤如下:
- 打开用户目录下的 .m2/settings.xml。Windows 一般在 C:\Users\你的用户名\.m2 下,没有这个文件就新建一个。
- 在 mirrors 节点里加一条 mirror,mirrorOf 写 *,url 填阿里云公共仓库地址。
- 执行一次 mvn clean install,看日志里的依赖是不是从 maven.aliyun.com 下载的。如果还是从 repo.maven.apache.org 走,说明配置没被读取,多半是文件位置或者标签拼写有问题。
<settings>
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>
mirrorOf 写 * 表示所有请求都经过这个镜像。如果你的项目还要访问公司自己的私有仓库,就得把它排除,写成 *,!company-releases 这种形式。不排除的话,私有包会被转到阿里云去找,找不到就直接解析失败,排查起来很绕。
Gradle项目怎么配
Gradle项目可以在 build.gradle 的 repositories 里直接声明阿里云地址。如果想对本机所有项目生效,就放到 ~/.gradle/init.gradle 里。示例如下:
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
mavenCentral()
}
插件要单独走 gradle-plugin 仓库,这一点很容易漏。只配了 public,本机构建可能没问题,换一台机器就报某个插件找不到。两个地址都加上,这类问题基本就不再出现。
接入私有仓库要注意的地方
如果内部组件放在阿里云云效的制品仓库里,要在settings.xml的 servers 节点里配认证信息。密码别直接写进代码仓库,也别提交到Git。更稳妥的做法是用环境变量注入:
<server>
<id>company-releases</id>
<username>${env.MAVEN_USER}</username>
<password>${env.MAVEN_PASSWORD}</password>
</server>
这里的 id 必须和pom.xml里仓库声明的 id 完全一致,大小写和拼写都要对上,否则认证不会生效。CI里把账号密码设成流水线的加密变量,日志里也就不会打印出来。
常见问题怎么排查
- 依赖还是从中央仓库下载:检查是不是有多个 settings.xml 在起作用,或者 mirrorOf 被别的配置覆盖了。
- 出现 401 或 403:大多是私有仓库的账号密码不对,或者 server 的 id 和仓库 id 对不上。
- 本地缓存导致奇怪的报错:删掉 .m2/repository 下对应的目录再构建。快照版本拿不到最新的,可以加 -U 参数强制更新。
- Gradle离线构建失败:先确认 ~/.gradle 缓存是完整的。CI上可以把这个目录做成缓存,减少每次重新下载。
配置改完后,最好在一台干净的机器上完整构建一次,确认依赖都能解析。这一步花不了几分钟,能省掉很多后面才暴露的麻烦。