这篇是我给 Java 项目留的 Maven 配置。以前 Maven Central 下载不动时,我用过本机代理,也用过阿里云镜像。配置都放在用户目录的 ~/.m2/settings.xml,不跟着某个项目走。
使用本机代理
本机代理监听 127.0.0.1:7890 时,我的配置是:
<settings>
<proxies>
<proxy>
<id>local-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>127.0.0.1</host>
<port>7890</port>
<nonProxyHosts>localhost|127.*</nonProxyHosts>
</proxy>
</proxies>
</settings>端口变了就改 port。代理不用了,我会把 active 改成 false 或直接移除这段,免得过一段时间忘了,Maven 还在连接一个已经不存在的本地端口。
代理有账号密码时可以加 username 和 password,但真实凭据不能放进公开文章或项目仓库。
使用阿里云 Maven 镜像
不走本机代理时,我也用过阿里云公共仓库替代 Maven Central:
<settings>
<mirrors>
<mirror>
<id>aliyun-public</id>
<name>Aliyun Maven Public</name>
<url>https://maven.aliyun.com/repository/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>mirrorOf 写成 central,只替换仓库 ID 为 central 的 Maven Central,不会把项目声明的所有私有仓库都强行改掉。
代理和镜像放在一起
两项都要用时,放进同一个 settings.xml:
<settings>
<proxies>
<proxy>
<id>local-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>127.0.0.1</host>
<port>7890</port>
<nonProxyHosts>localhost|127.*</nonProxyHosts>
</proxy>
</proxies>
<mirrors>
<mirror>
<id>aliyun-public</id>
<name>Aliyun Maven Public</name>
<url>https://maven.aliyun.com/repository/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>我不同时维护几份 settings.xml。真要临时测试另一份配置,再用 Maven 的 -s 参数指定文件:
mvn -s <SETTINGS_FILE> help:effective-settings平时排查时,我会先看最终生效的配置:
mvn help:effective-settings如果镜像里缺包或版本同步慢,我会临时停用镜像再试。这样比较容易判断是项目依赖本身有问题,还是镜像还没同步。