Maven 依赖项失败并出现 501 错误

Aru*_*mar 196 java maven jenkins maven-central

最近在Jenkins中运行的Maven构建作业失败,出现以下异常,表示它们无法从Maven Central 中提取依赖项,应使用HTTPS。我不确定如何将请求从HTTP更改为HTTPS。有人可以指导我解决这个问题吗?

[错误] 无法解析的构建扩展:
插件org.apache.maven.wagon:wagon-ssh:2.1或其依赖项之一无法解析:
无法收集依赖项org.apache.maven.wagon:wagon-ssh:jar:2.1 ()
无法读取工件描述符org.apache.maven.wagon:wagon-ssh:jar:2.1
无法org.apache.maven.wagon:wagon-ssh:pom:2.1从/向中央(http://repo.maven.apache. org/maven2):
无法传输文件:http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom
返回代码为:501, ReasonPhrase:HTTPS Required. -> [Help 2]

等待Jenkins完成收集data[ERROR]
插件org.apache.maven.plugins:maven-clean-plugin:2.4.1或其依赖项之一无法解决:
无法读取工件描述符org.apache.maven.plugins:maven-clean-plugin:jar:2.4.1
无法org.apache.maven.plugins:maven-clean-plugin:pom:2.4.1从/向中央传输工件(http://repo.maven.apache.org/maven2):
无法传输文件:http : //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1.pom
返回代码为:501 , ReasonPhrase:HTTPS Required. -> [Help 1]

far*_*ath 166

Central 501 HTTPS Required 中解释了观察到的错误的原因

自 2020 年 1 月 15 日起,中央存储库不再支持通过普通 HTTP 进行的不安全通信,并要求对存储库的所有请求都通过 HTTPS 进行加密。

看起来最新版本的 Maven(在 3.6.0、3.6.1 中尝试过)默认已经在使用 HTTPS URL。

以下是主要存储库切换的日期:

从 1 月 13 日开始,您的 Java 构建可能会中断(如果您尚未将 repo 访问权限切换到 HTTPS)

更新:似乎从 maven 3.2.3 maven central 通过 HTTPS 访问见/sf/answers/1778816091/

Maven 更改日志 ( http://maven.apache.org/docs/3.2.3/release-notes.html )

  • 你好!我是发起这项全行业倡议的最初研究人员。您也可以在这里找到我关于重要日期的博客文章:https://medium.com/@jonathan.leitschuh/update-want-to-take-over-the-java-ecosystem-all-you-need-is -a-mitm-d069d253fe23?source=friends_link&sk=8c8e52a7d57b98d0b7e541665688b454 (34认同)

小智 107

我面临同样的问题。我尝试了两种解决方案,对我来说都很好。

  • 更新 Maven 版本库(Maven 版本 >= 3.2.3)
  • 限制当前 Maven 版本使用 HTTPS 链接。

更新 Maven 版本存储库:

下载包含默认 https 地址的Apache Maven 二进制文件Apache Maven 3.6.3 二进制文件)。并在 NetBeans 菜单栏(Java Maven Dialog View)的工具中打开选项对话框窗口。并在 Maven Home List Box ( Maven Home List Box View ) 中选择浏览选项。添加Apache Maven新下载的版本(Updated Maven Home List Box View)后,项目构建运行成功。

限制当前 Maven 版本使用 HTTPS 链接:

在项目的pom.xml中包含以下代码。

<project>
      ...
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <name>Central Repository</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
        </pluginRepository>
    </pluginRepositories>
    <repositories>
        <repository>
            <id>central</id>
            <name>Central Repository</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>
Run Code Online (Sandbox Code Playgroud)

  • 限制当前 Maven 版本使用 HTTPS 链接:对我有用。 (2认同)

Ash*_*ani 40

自 2020 年 1 月 15 日起,中央存储库不再支持通过普通 HTTP 进行的不安全通信,并要求对存储库的所有请求都通过HTTPS加密。

如果您收到此错误,则需要将所有对 Maven Central 的 URL 引用替换为其规范的 HTTPS 对应项。

来源

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

老的:

repositories {
   maven { url "http://repo.maven.apache.org/maven2" }
}
Run Code Online (Sandbox Code Playgroud)

新的:

repositories {
   maven { url "https://repo.maven.apache.org/maven2" }
}
Run Code Online (Sandbox Code Playgroud)

  • @ArunanSugunakumar 我没有更改settings.xml。您需要在 POM 中更改所有内容。更新maven的中央存储库。我将中央存储库的示例放在答案线程中。如下请见 (3认同)

小智 34

尝试在任何浏览器中点击以下 URL。它将返回 501

http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom

请尝试使用 https。它将下载一个 pom.xml 文件:

https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom

请在 setting.xml 文件中添加它(https://repo.maven.apache.org/maven2):

<repositories>
   <repository>
      <id>Central Maven repository</id>
      <name>Central Maven repository https</name>
      <url>https://repo.maven.apache.org/maven2</url>
   </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)

  • 找到这个答案,使文件中的位置更清晰,现在它可以工作:/sf/answers/4184883181/ (2认同)

Sum*_*was 24

更新 Maven 的中央存储库并使用https而不是http

<repositories>
    <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)


meh*_*mpt 20

我在 Docker 容器上使用全新安装的 Maven/Java。

对我来说,我必须cd $M2_HOME/confsettings.xml那里编辑文件。在里面添加以下块<mirrors>...</mirrors>

<mirror>
  <id>central-secure</id>
  <url>https://repo.maven.apache.org/maven2</url>
  <mirrorOf>central</mirrorOf>
</mirror>
Run Code Online (Sandbox Code Playgroud)


小智 13

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


Ada*_* G. 13

Maven 正在转向 HTTPS 并禁用 HTTP 访问

简而言之,从 2020 年 1 月 15 日起,Maven 中央存储库不再支持 HTTP 连接(其他存储库也在做同样的事情)。因此,您将指示您的 Maven/Gradle 设置使用 HTTPS URL。

解决方案:

您可以选择以下三种方法之一。

  1. 在您的项目pom.xml文件中添加一个存储库

    <project>
    ...
      <repositories>
        <repository>
          <id>central maven repo</id>
          <name>central maven repo https</name>
          <url>https://repo.maven.apache.org/maven2</url>
        </repository>
      </repositories>
    </project>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将存储库添加到文件中的配置settings.xml文件中。

    <profile>
      <id>my profile</id>
      <repositories>
        <repository>
          <id>central maven repo</id>
          <name>central maven repo https</name>
          <url>https://repo.maven.apache.org/maven2</url>
          </repository>
      </repositories>
    </profile>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将您的 Maven 版本更新为使用 https 值作为默认值的新版本。此刻最新的 3.6.3点此下载

对于摇篮:

仅替换 HTTPS 版本的 URL。

repositories {
   maven { url "https://repo.maven.apache.org/maven2" }
}
Run Code Online (Sandbox Code Playgroud)


小智 13

我将以下代码段添加到 setting.xml 并解决了问题,

<mirrors>
    <mirror>
        <id>maven-mirror</id>
        <name>Maven Mirror</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>
Run Code Online (Sandbox Code Playgroud)


小智 12

在 pom.xml 文件中添加它。这对我来说可以

<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <releases>
            <updatePolicy>never</updatePolicy>
        </releases>
    </pluginRepository>
</pluginRepositories>

<repositories>
    <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)


CAM*_*344 9

我有同样的问题,但我使用GitLab而不是 Jenkins。我必须采取的步骤来解决这个问题:

  1. 我的项目在 GitLab 中,因此它使用 .yml 文件,该文件指向我必须进行持续集成的 Docker 映像,并且它使用的映像具有http://maven URL。所以我把它改成了https://maven
  2. 同一个 Dockerfile 映像有一个旧版本的 Maven 3.0.1,一夜之间就给我出了问题。我更新了 Dockerfile 以获得最新版本 3.6.3
  3. 然后我将该映像部署到我的在线存储库,并更新了我的 Maven 项目 ymlfile 以使用该新映像。
  4. 最后,我更新了我的主要项目 POM 文件以引用https://maven ...而不是http://maven

我意识到这更特定于我的设置。但是如果不执行上述所有步骤,我仍然会继续收到此错误消息 Return code is: 501 , ReasonPhrase:HTTPS Required


Ell*_*hir 9

正如其他答案中所述,现在需要https向 Maven Central 发出请求,而旧版本的 Maven 使用http

如果你不想/不能升级到Maven 3.2.3+,您可以通过添加以下代码到你做一个变通方法MAVEN_HOME \的conf \ settings.xml的进入<profiles>部分:

<profile>
    <id>maven-https</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories> 
</profile>
Run Code Online (Sandbox Code Playgroud)

这将始终是一个活动设置,除非您在需要时在 POM 中禁用/覆盖它。


Osc*_*rai 8

对我(企业编码员)来说,还在settings.xml修复问题中添加了一个镜像存储库。我也在 docker 容器中使用 Maven。

<mirrors>
    <mirror>
        <id>https-mirror</id>
        <name>Https Mirror Repository</name>
        <url>https://repo1.maven.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>
Run Code Online (Sandbox Code Playgroud)


Bha*_*hah 7

对于所有企业编码人员,理想情况下,如果出现此错误,则意味着您的代码库仍在从开源社区构建。您需要使用内部公司 Maven 存储库管理器来管理“中央”存储库。

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

<M2_HOME>/conf/settings.xml
Run Code Online (Sandbox Code Playgroud)

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

    <mirror>
     <id>other-mirror</id>
     <name>Other Mirror Repository</name>
     <url>https://other-mirror.repo.other-company.com/maven2</url>
     <mirrorOf>central</mirrorOf>
    </mirror>
Run Code Online (Sandbox Code Playgroud)

在 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 进行的不安全通信。


use*_*034 5

使用 Ubuntu 16.04,java 1.8.0_201。

我卸载了旧的 maven 并安装了 Maven 3.6.3,仍然收到这个错误,即 Maven 依赖项失败并出现 501 错误。

意识到这可能是与要求 https 相关的信任库/密钥库问题。发现您现在可以使用 jvm.config 文件配置 -Djavax 选项,请参阅:https ://maven.apache.org/configure.html 。

由于我也在使用 Tomcat,因此我将密钥库和信任库配置从 Tomcat (setenv.sh) 复制到我的 jvm.config 中,然后它就成功了!

还有一个选项可以在“export MAVEN_OPTS”(使用 mvn generate 时)中传递此配置,但尽管这阻止了 501 错误,但它创建了另一个错误:它需要一个 pom 文件。

创建一个单独的 jvm.config 文件效果很好,只需将它放在项目的根目录中即可。

希望这对某人有所帮助,花了我一整天的时间才弄清楚!


raw*_*raw 5

如果您使用的是 Netbeans 旧版本,则必须在 maven 中进行更改才能使用 https over http

打开 C:\Program Files\NetBeans8.0.2\java\maven\conf\settings.xml 并将以下代码粘贴到 mirrors 标记之间

<mirror>
<id>maven-mirror</id>
<name>Maven Mirror</name>
<url>https://repo.maven.apache.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
Run Code Online (Sandbox Code Playgroud)

它会强制 maven 使用https://repo.maven.apache.org/maven2 url。