Java Maven 代理与镜像配置

太阳作者太阳
原创内容采用 CC-4.0 协议发布,转载请注明出处
JavaMaven代理镜像

这篇是我给 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 还在连接一个已经不存在的本地端口。

代理有账号密码时可以加 usernamepassword,但真实凭据不能放进公开文章或项目仓库。

使用阿里云 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

如果镜像里缺包或版本同步慢,我会临时停用镜像再试。这样比较容易判断是项目依赖本身有问题,还是镜像还没同步。

参考资料