最近,在詹金斯(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]


评论

您正在使用repo.maven.apache.org/maven2网址连接到Maven中央站点,而不是使用repo.maven.apache.org/maven2,即使用https连接

在jenkins中检查您的settings.xml以获取Maven中央URL

嗨,Manjunath,我有同样的问题。您知道如何强制Maven使用HTTPS而不是HTTP

@Lahiru Madushanka通过链接,所以您为您的问题找到了答案stackoverflow.com/questions/25393298/…

我已将Maven版本更改为3.6.3,但仍显示相同的错误

#1 楼

Central 501 HTTPS Required


解释了导致观察到错误的原因。

2020年1月15日生效,Central Repository不再支持通过纯HTTP进行的不安全通信,并且要求所有到存储库的请求
已通过HTTPS加密。


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

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

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

更新:似乎可以通过HTTPS访问maven 3.2.3中的maven Central。
请参见https://stackoverflow.com/a/25411658/5820670

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

评论


嗨!我是发起这项全行业计划的原始研究员。您也可以在这里找到有关重要日期的博客文章:medium.com/@jonathan.leitschuh/…

–乔纳森·莱特舒(Jonathan Leitschuh)
1月16日在16:39



@JonathanLeitschuh请写一个完整的答案,可以投票和接受...

–索比昂·拉文·安德森(ThorbjørnRavn Andersen)
1月16日23:02



我在Ubuntu 18.04上使用了maven 3.6.0,但它似乎并未使用https url。

–阿舒托什
1月16日23:25

@Ashutosh:与Ubuntu 19.10上的Maven 3.6.1相同。我不确定为什么会这样,它可能是Ubuntu补丁,但是为什么他们会这样做?)。要解决此问题,请使用下面的任何更新settings.xml文件的答案(并请对其进行投票,因为这是正确的解决方案,而不是使用修补的Maven)。

–古斯
1月23日10:41



因此,我明确配置了settings.xml以使用HTTPS存储库..它可以与wget一起使用,但是由于某些非常奇怪的原因,mvn archetype:generate -X(仅用于测试是否可以下载依赖项)它仍然会打印它。访问下载:http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom请提供任何帮助。

– Giorgi Tsiklauri
2月6日9:53



#2 楼

我正面临着同样的问题。我尝试了两种解决方案,两种方法都适合我。


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

更新Maven版本库:

下载包含默认https地址的Apache Maven二进制文件(Apache Maven 3.6.3二进制文件)。并在NetBeans菜单栏的工具(Java Maven对话框视图)中打开“选项”对话框窗口。然后在“ Maven主列表框”(“ Maven主列表框视图”)中选择“浏览”选项。添加新下载的Apache Maven版本(“更新的Maven主页列表框视图”)后,该项目将成功构建并运行。

将当前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>


评论


我有中央存储库,但没有中央插件存储库。这为我解决了。

–ponder275
1月31日16:09

限制当前的Maven版本使用HTTPS链接:对我有用。

–穆罕默德·阿纳斯(Mohammad Anas)
2月6日上午11:17

就我而言,我错过了部分,使用原型时出现错误,因为插件默认为http。

–user1708042
2月12日12:31



这也为我解决了这个问题,但是我收到另一个错误“ Received致命警报:protocol_version”,不得不切换到Java 8进行修复,以防万一有人偶然遇到同一问题。

–唐金
2月19日12:29

我很高兴为打破平局做出了贡献。这个答案解决了我遇到的类似问题。

–布莱恩风险
2月24日20:17

#3 楼


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

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


(源)

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

旧版本:

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


新功能:

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


评论


是的,我已经替换了setting.xml文件,但不幸的是它仍然无法正常工作。我做对了还是有其他文件需要更改?

– Sumeet Vishwas
1月16日6:29

@SumeetVishwas可以共享一个示例settings.xml文件吗?

–阿鲁南Sugunakumar
1月16日6:52

@ArunanSugunakumar我在settings.xml中没有更改。您只需更改POM。更新Maven的中央存储库。我将中央存储库的样本放入应答线程中。如下请见

– Sumeet Vishwas
1月16日10:04



OP的问题是:“我不确定如何将请求从HTTP更改为HTTPS。”这个答案没有解决这个问题。

– wchargin
1月16日在16:14

#4 楼

尝试在任何浏览器中点击以下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

请将其(https://repo.maven.apache.org/maven2)添加到setting.xml文件中:

<repositories>
   <repository>
      <id>Central Maven repository</id>
      <name>Central Maven repository https</name>
      <url>https://repo.maven.apache.org/maven2</url>
   </repository>
</repositories>


评论


您能否提供完整的setting.xml的示例,因为我尝试将以上内容添加到文件中而未成功?

– jhertz
2月18日15:16



找到了使文件中的位置更清晰的答案,现在可以使用:stackoverflow.com/a/59784045/3120576

– jhertz
2月18日15:33

#5 楼

更新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>


评论


我在Pom中尝试了此方法,并且效果很好: central repo https Central Repository Https repo.maven.apache.org/maven2

–lam
1月16日12:59



谢谢。使用Netbeans在ubuntu 18.10中工作。必须将Maven设置为Netbeans中最新的Maven版本。您在哪里找到此解决方案?

– Sanal S
1月27日4:10



您可能还必须更新插件存储库。至少也必须为我完成此操作才能修复。

–唐金
2月19日12:30

#6 楼

我在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>

内添加以下块

评论


您能否分享您的Dockerfile?我遇到了同样的问题,但我不知道该如何解决!

–汉范(Han Van Pham)
1月22日在16:51



@HanVanPham我将我的Maven更新至最新版本,此HTTP问题已修复。

– mehulmpt
1月22日18:38

对我来说,对本地settings.xml($ HOME / .m2 / settings.xml)文件中的中央安全块的调整也能很好地工作。

–t3az0r
4月14日15:13

#7 楼

我正在使用过时的Maven版本(3.0.3和3.1)。这些旧版本不再支持http存储库(如上所述)。升级到Maven 3.6对我来说是修复程序。

评论


从maven 3.2.3起,默认情况下,Central通过HTTPS访问maven.apache.org/docs/3.2.3/release-notes.html

–法拉索
1月20日8:04

#8 楼

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

简短的故事,从2020年1月15日开始,Maven Central存储库不再支持HTTP连接(其他存储库也在这样做)。因此,您将指示您的Maven / Gradle设置使用HTTPS URL。解决方案:

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



在项目的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>
 



将存储库添加到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>
  

将您的Maven版本更新为使用https值作为默认值的新版本。目前最新的版本3.6.3在此处下载


对于Gradle:

仅替换HTTPS版本的URL。

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


评论


要从3.3.9升级到3.6.3,需要首先完全卸载旧版本吗?还是只安装最新版本?

– BigRedEO
2月11日17:03

@BigRedEO您的环境中可以有多个Maven版本。但是,您的$ M2_HOME或$ PATH环境变量将仅指向其中之一,这将是您的默认Maven版本。我希望先卸载旧版本,再安装新版本。但是,这取决于您的需求。

–亚当·M·甘博阿·G。
2月11日在22:33

#9 楼

我被添加到以下代码段的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>


#10 楼

如其他答案所述,现在必须使用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>


除非您必要时在您的POM中禁用/覆盖它。

#11 楼

我有同样的问题,但我使用的是GitLab而不是Jenkins。为了解决这个问题,我必须执行以下步骤:


我的项目在GitLab中,因此它使用.yml文件,该文件指向我必须进行持续集成的Docker映像,并且它使用的图像具有http:// maven URL。所以我将其更改为https:// maven。
相同的Dockerfile映像具有较旧的Maven 3.0.1版本,这使我一整夜都遇到了问题。我更新了Dockerfile以获取最新版本3.6.3
,然后将该映像部署到我的在线存储库,并更新了Maven项目ymlfile以使用该新映像。
最后,我更新了我的主要项目POM文件引用https:// maven ...而不是http:// maven


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

评论


您能否分享您的Dockerfile?

–汉范(Han Van Pham)
1月21日8:34

#12 楼

对我(公司编码员)而言,还在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>


评论


您能否告诉我在哪里可以找到settings.xml文件@Oscar?

–汉范(Han Van Pham)
1月22日4:09

当然!在我们的Dockerfile中,我们首先将其放置在这样的临时文件夹中:echo“ .... ”> /tmp/maven-settings.xml。然后,使用“ -s”选项运行maven,并将路径传递到设置文件,例如“ mvn -s /tmp/maven-settings.xml clean”。希望能帮助到你!

–奥斯卡·德莱(Oscar Drai)
1月23日10:28



@ han-van-pham您可以在$ HOME / .m2 /中找到它。如果没有,请在此处创建它。

–dr0i
3月16日8:39

#13 楼

将此添加到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>


评论


像魅力一样工作!非常感谢您保存我的一天

– Kshri
7月17日10:04

对我有用。谢谢

–亚历杭德罗·冈萨雷斯(Alejandro Gonzalez)
12月15日19:27

这也救了我。觉得此评论应该更接近顶部!谢谢 :)

– Eitel Dagnin
12月18日15:39

#14 楼

对于所有公司编码人员来说,理想情况下,如果遇到此错误,则意味着您的代码库仍是从开源社区构建的。您需要使用内部公司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/

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

理想情况下,您需要在此处使用公司的源代码管理/存储库URL。

如其他答案所述,从2020年1月15日开始生效,中央Maven存储库不支持通过纯HTTP进行的不安全通信。

评论


在“镜像”部分中添加镜像后,出现错误,该同级未通过身份验证。我现在该怎么办?谢谢!

–迪姆森
1月23日9:35

@dimson这意味着您尝试与https连接,但是缺少用于身份验证的证书,可能是因为Java没有该证书。将证书从存储库导入Java密钥库,或升级Java。

–tibortru
1月23日11:09

@tibortru Thanx Man,已经解决了这个问题。我已将以下属性添加到IDE中的maven中:maven.wagon.http.ssl.insecure = true maven.wagon.http.ssl.allowall = true maven.wagon.http.ssl.ignore.validity.dates = true https。协议= TLSv1,TLSv1.1,TLSv1.2。之后,一切正常。

–迪姆森
1月23日11:35



是的,那是另一回事。非安全的一个:)

–tibortru
1月23日12:54

#15 楼

如果您使用的是Netbeans的旧版本,则必须在maven中进行更改,以便通过http

使用https打开C:\ Program Files \ NetBeans8.0.2 \ java \ maven \ conf \ settings.xml
,并在下面的代码之间粘贴以下镜像标记之间:

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


,它将强制maven使用https://repo.maven.apache.org/maven2网址。

#16 楼

使用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文件非常完美,只需将其放在项目的根目录中即可。

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

#17 楼

jcenter也会发生同样的问题。


从2020年1月13日开始,Jcenter仅在HTTPS上可用。


使用同样将开始面临问题。若要快速修复,请在build.gradle中执行以下操作,而不是使用

repositories {
jcenter ()
//others
}


,而不是使用
repositories {
jcenter { url "http://jcenter.bintray.com/"}
//others
}


#18 楼

错误:

无法传输文件:http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1。 pom。

返回码是:501,ReasonPhrase:HTTPS必需。

根本原因分析:

Maven Central希望客户端使用https,但是客户端仅发出简单的HTTP请求。

因此,下载名为“ wagon-ssh-2.1.pom”的软件包的请求失败。

如何解决此问题?

替换URL“ http:// repo .maven.apache.org / maven2“

和pom.xml文件或build.gradle中的” https://repo.maven.apache.org/maven2“

项目文件。

评论


我在哪里替换此网址

–dhS
3月16日14:57

#19 楼

在任何人需要的情况下共享它:

旧的Gradle配置(没有Gitlab,Docker部署,用于简单项目)

repositories {
google()
jcenter()

maven { url "http://dl.bintray.com/davideas/maven" }
maven { url 'https://plugins.gradle.org/m2/' }
maven { url 'http://repo1.maven.org/maven2' }
maven { url 'http://jcenter.bintray.com' }
}


新配置:

repositories {
google()
jcenter()

maven { url "https://dl.bintray.com/davideas/maven" }
maven { url 'https://plugins.gradle.org/m2/' }
maven { url 'https://repo1.maven.org/maven2' }
maven { url 'https://jcenter.bintray.com' }
}


注意https。快乐的编码:)

#20 楼

我当前的环境不支持HTTPS,因此添加不安全版本的存储库解决了我的问题:按照Sonatype的http://insecure.repo1.maven.org。

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


#21 楼

最初来自https://stackoverflow.com/a/59796324/32453,但这可能会很有用:

请注意,您的父pom也可以(重新)定义存储库,并且是否已覆盖Central和出于某种原因指定了http,则需要进行修复(因此需要修复的位置:〜/ .m2 / settings.xml
以及父poms)。

如果不能在父pom中修复它,您可以在子pom中覆盖父pom的repo,就像这样(从3.6.3默认的超级pom中提取,似乎它们也从repo1更改了名称):

  <repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url> <!-- the https you've been looking for -->
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled> <!-- or set to true if desired, default is false -->
      </snapshots>
    </repository>
  </repositories>


#22 楼

我下载了最新的eclipse,并从这里https://www.eclipse.org/downloads/packages/release/下载,这解决了我的问题。

#23 楼

我遇到了最新版本(2020年8月)的问题(在多年未使用此机器上使用Maven的情况下),但在阅读了这些答案后,为什么仍可能会遇到问题,我ing之以鼻。
原来我有一个旧的settings.xml放在我的主目录的.m2/文件夹中,几年前有一些自定义。
但是,即使删除该文件也无法解决我的问题。我最终删除了整个.m2文件夹。
我认为除了下载的资源之外,它没有其他内容。也许仅删除repository/org/apache/maven/archetype这样的文件夹就足够了。

#24 楼

我也发生了这个错误。我做了上面穆罕默德·乌默所说的话。但是,它仅解决了spring-boot-dependencies的错误,并且spring-boot-dependencies具有子依赖项。现在,有21个错误。以前,这是2个错误。像这样:
Non-resolvable import POM: Could not transfer artifact org.springframework.cloud:spring-cloud-dependencies:pom:Hoxton.SR3 from/to central

以及错误消息中还需要https。
我将Maven版本从3.2.2更新为3.6.3,将Java版本从8更新为11。现在,所有错误的https消失了。
要更新Maven版本,请从这里下载最新的Maven:下载maven

解压缩并将其移至/opt/maven/

设置路径export PATH=$PATH:/opt/maven/bin

而且,还要从PATH中删除旧行家


#25 楼

在pom.xml中添加以下存储库。

<project>
...
    <repositories>
        <repository>
            <id>central</id>
            <name>Maven Plugin Repository</name>
            <url>https://repo1.maven.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
...
</project>



评论


这将导致相同的问题,因为它使用的是http

– Yudhistira Arya
1月18日15:08