我下载使用的是 apache-maven-3.8.6,我目前公司的私服并没有支持HTTPS协议,网上给出的解决方案都是降低版本至 3.8.1 以下,但是,有同事不降版本也能运行,我就很奇怪。

我的配置截图

在 Maven安装目录/conf/ 文件夹下,我有两个 settings 文件:

  • settings.xml (版本自带的)
  • settings.tiansu.xml (公司同事给我的)

于是,问题出在 3.8.6 版本自带的 settings.xml 中 maven-default-http-blocker :

<mirrors>
  <mirror>
    <id>maven-default-http-blocker</id>
    <mirrorOf>external:http:*</mirrorOf>
    <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
    <url>http://0.0.0.0/</url>
    <blocked>true</blocked>
  </mirror>
</mirrors>

我的猜想是 settings.xml和settings.tiansu.xml中的配置取了“并集”,且这个 maven-default-http-blocker 造成了报错

解决方案

我把 settings.xml 中 maven-default-http-blocker 这个 mirror 注释掉以后,就不再报错了。

<mirrors>
  <!--<mirror>
    <id>maven-default-http-blocker</id>
    <mirrorOf>external:http:*</mirrorOf>
    <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
    <url>http://0.0.0.0/</url>
    <blocked>true</blocked>
  </mirror>-->
</mirrors>

从 mirror-settings 可以知道

since Maven 3.8.0, external:http:* matches all repositories using HTTP except those using localhost.

所以,我http开头的仓库都被这个 maven-default-http-blocker 拦截了,然后 blocked 了。