最近,在Jenkins中运行的Maven构建作业失败,出现以下异常,表示它们无法从Maven Central提取依赖项,应该使用HTTPS。我不知道如何将请求从HTTP更改为HTTPS。有人能指导我一下这件事吗?

[ERROR] Unresolveable build extension: Plugin org.apache.maven.wagon:wagon-ssh:2.1 or one of its dependencies could not be resolved: Failed to collect dependencies for org.apache.maven.wagon:wagon-ssh:jar:2.1 (): Failed to read artifact descriptor for org.apache.maven.wagon:wagon-ssh:jar:2.1: Could not transfer artifact org.apache.maven.wagon:wagon-ssh:pom:2.1 from/to central (http://repo.maven.apache.org/maven2): Failed to transfer file: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom. Return code is: 501, ReasonPhrase:HTTPS Required. -> [Help 2] Waiting for Jenkins to finish collecting data[ERROR] Plugin org.apache.maven.plugins:maven-clean-plugin:2.4.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.4.1: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.4.1 from/to central (http://repo.maven.apache.org/maven2): Failed to transfer file: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1.pom. Return code is: 501 , ReasonPhrase:HTTPS Required. -> [Help 1]


当前回答

我使用的是Maven的一个过时版本(3.0.3和3.1)。这些旧版本不再支持http存储库(如上所述)。升级到Maven 3.6对我来说是解决办法。

其他回答

自2020年1月15日起,中央存储库不再支持 在纯HTTP上的不安全通信,并要求所有请求 通过HTTPS加密到存储库。 如果收到此错误,则需要替换所有URL 对Maven Central的引用及其规范的HTTPS对等物。

(源)

我们在我的项目build.gradle中做了以下更改:

Old:

repositories {
   maven { url "http://repo.maven.apache.org/maven2" }
}

New:

repositories {
   maven { url "https://repo.maven.apache.org/maven2" }
}

对于所有的公司程序员来说,理想情况下, 如果您得到这个错误,这意味着您的代码库仍然是由开源社区构建的。您需要使用内部公司的Maven存储库管理器来超越“中央”存储库。

您可以转到settings.xml并将中央存储库URL从http://重写为https://

<M2_HOME>/conf/settings.xml

找到镜像部分并添加以下条目:

    <mirror>
     <id>other-mirror</id>
     <name>Other Mirror Repository</name>
     <url>https://other-mirror.repo.other-company.com/maven2</url>
     <mirrorOf>central</mirrorOf>
    </mirror>

在URL部分,如果您使用http://repo1.maven.org/maven2/或http://repo.maven.apache.org/maven2/那么

将http://repo1.maven.org/maven2/替换为https://repo1.maven.org/maven2/

将http://repo.maven.apache.org/maven2/替换为https://repo.maven.apache.org/maven2/

理想情况下,您需要在这里使用您公司的源代码控制管理/存储库URL。因为这将阻止与开源Maven存储库社区的任何联系。

正如在其他回答中提到的,从2020年1月15日起,中央Maven存储库不支持纯HTTP上的不安全通信。

我在Docker容器上使用干净的Maven/Java安装。

对我来说,我必须cd $M2_HOME/conf并编辑settings.xml文件。在<mirrors>…</mirrors>中添加以下块

<mirror>
  <id>central-secure</id>
  <url>https://repo.maven.apache.org/maven2</url>
  <mirrorOf>central</mirrorOf>
</mirror>

同样的问题也发生在jcenter上。

自2020年1月13日起,Jcenter仅支持HTTPS协议。

使用相同方法获得依赖项的项目将开始面临问题。为了快速修复,请在build.gradle中执行以下操作

而不是

repositories {
jcenter ()
//others
}

用这个:

repositories {
jcenter { url "http://jcenter.bintray.com/"}
//others
}

我目前的环境不支持HTTPS,所以添加不安全版本的repo解决了我的问题:http://insecure.repo1.maven.org按照Sonatype

    <repositories>
       <repository>
          <id>Central Maven repository</id>
          <name>Central Maven repository insecure</name>
          <url>http://insecure.repo1.maven.org</url>
       </repository>
    </repositories>