最近,在 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 必需。 -> [帮助 2] 等待 Jenkins 完成收集数据[错误] 插件 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 必需。 -> [帮助 1]
settings.xml
以获取 maven 中心网址
Central 501 HTTPS Required 中解释了观察到的错误的原因
自 2020 年 1 月 15 日起,中央存储库不再支持通过纯 HTTP 进行的不安全通信,并要求对存储库的所有请求都通过 HTTPS 进行加密。
默认情况下,最新版本的 Maven(尝试使用 3.6.0、3.6.1)似乎已经在使用 HTTPS URL。
以下是主要存储库切换的日期:
更新:似乎从 maven 3.2.3 maven central 是通过 HTTPS 访问的,请参阅 https://stackoverflow.com/a/25411658/5820670
Maven 更改日志 (http://maven.apache.org/docs/3.2.3/release-notes.html)
我面临同样的问题。我尝试了两种解决方案,它们都对我有用。
更新 Maven 版本库(Maven 版本 >= 3.2.3)
限制当前 Maven 版本使用 HTTPS 链接。
更新 Maven 版本库:
下载包含默认 https 地址 (Apache Maven 3.6.3 binary) 的 Apache Maven 二进制文件。并在 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>
自 2020 年 1 月 15 日起,中央存储库不再支持通过纯 HTTP 进行的不安全通信,并要求对存储库的所有请求都通过 HTTPS 进行加密。如果您收到此错误,则需要将所有对 Maven Central 的 URL 引用替换为它们的规范 HTTPS 对应项。
(source)
我们在我的项目的 build.gradle 中进行了以下更改:
老的:
repositories {
maven { url "http://repo.maven.apache.org/maven2" }
}
新的:
repositories {
maven { url "https://repo.maven.apache.org/maven2" }
}
尝试在任何浏览器中点击以下 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>
更新 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>
我在 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>
在 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>
Maven is moving to HTTPS and disabling HTTP access
简而言之,从 2020 年 1 月 15 日起,Maven 中央存储库不再支持 HTTP 连接(其他存储库也在这样做)。因此,您将指示您的 Maven/Gradle 设置使用 HTTPS URL。
解决方案:
您可以选择以下三种方法之一。
在项目的 pom.xml 文件中添加一个存储库
对于 Gradle:
仅替换 HTTPS 版本的 URL。
repositories {
maven { url "https://repo.maven.apache.org/maven2" }
}
$M2_HOME
或 $PATH
环境变量将仅指向其中一个,这将是您的默认 maven 版本。我宁愿在安装新的之前卸载旧的。但是,这取决于您的需求。
我在 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>
我使用的是过时版本的 Maven(3.0.3 和 3.1)。这些旧版本不再支持 http 存储库(如上所述)。升级到 Maven 3.6 是我的解决方案。
如其他答案所述,现在需要 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 中禁用/覆盖它。
我有同样的问题,但我使用 GitLab 而不是 Jenkins。我必须采取的步骤来解决这个问题:
我的项目在 GitLab 中,因此它使用指向 Docker 映像的 .yml 文件,我必须进行持续集成,并且它使用的映像具有 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
对我(企业编码员)来说,在 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>
对于所有的公司编码人员来说,理想情况下,如果您收到此错误,则意味着您的代码库仍在由开源社区构建。您需要使用内部公司的 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 进行的不安全通信。
如果您使用的是 Netbeans 旧版本,则必须在 maven 中进行更改以使用 https over http
打开 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 url。
使用 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 文件效果很好,只需将它放在项目的根目录中即可。
希望这对某人有所帮助,花了我一整天的时间才弄清楚!
jcenter也出现了同样的问题。
从 2020 年 1 月 13 日起,Jcenter 仅在 HTTPS 上可用。
使用相同的依赖项的项目将开始面临问题。要快速修复,请在 build.gradle 中执行以下操作
代替
repositories {
jcenter ()
//others
}
用这个:
repositories {
jcenter { url "http://jcenter.bintray.com/"}
//others
}
错误:
传输文件失败:http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom。
返回码为:501,ReasonPhrase:HTTPS 必需。
根本原因分析:
Maven 中心期望客户端使用 https,但客户端仅发出纯 HTTP 请求。
因此,下载名为“wagon-ssh-2.1.pom”的包的请求失败。
如何解决问题?
替换 URL“http://repo.maven.apache.org/maven2”
带有“https://repo.maven.apache.org/maven2”
在项目的 pom.xml 文件或 build.gradle 文件中。
我当前的环境不支持 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>
以下链接让我摆脱了麻烦,
https://support.sonatype.com/hc/en-us/articles/360041287334-Central-501-HTTPS-Required
您可以在您的 maven、apache-maven/conf/settings.xml 中进行更改。或者,如果您在 pom.xml 中指定,请在此处进行更改。
前,
<repository>
<id>maven_central_repo</id>
<url>http://repo.maven.apache.org/maven2</url>
</repository>
现在,
<repository>
<id>maven_central_repo</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
注意从 http 到 https 的变化
分享这个以防有人需要它:
旧 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。快乐编码:)
最初来自 https://stackoverflow.com/a/59796324/32453,虽然这可能有用:
请注意,您的父 pom 也可以(重新)定义存储库,如果它已经覆盖了中心并出于任何原因指定了 http,则您需要修复它(所以要修复的地方:~/.m2/settings.xml 和父poms)。
如果您无法在父 pom 中修复它,您可以像这样在您的子 pom 中覆盖父 pom 的 repo(从 3.6.3 默认 super 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>
这个错误也发生在我身上。我做了穆罕默德·乌默尔(Muhammad umer)上面所说的。但是,它只解决了 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 中删除旧的 maven
在旧的 grails 环境中,唯一无需升级即可工作的是:
设置.xml
<settings>
<mirrors>
<mirror>
<id>centralhttps</id>
<mirrorOf>central</mirrorOf>
<name>Maven central https</name>
<url>http://insecure.repo1.maven.org/maven2/</url>
</mirror>
</mirrors>
</settings>
我使用最新版本(2020 年 8 月)遇到了这个问题(在这台机器上很久没有使用 Maven 之后),并且在阅读了这些答案后,我一直在摸索为什么它仍然是一个问题。
原来,我的主目录的 .m2/
文件夹中有一个旧的 settings.xml
,其中包含几年前的一些自定义设置。
但是,即使删除该文件也无法为我解决问题。我最终删除了整个 .m2
文件夹。
我认为其中除了下载的资源之外没有其他任何内容。也许仅仅删除像 repository/org/apache/maven/archetype
这样的文件夹就足够了。
我下载了最后一个netbeans 12.2版本,问题解决了。
在 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
settings.xml
文件的答案(请为它们投票,因为这是正确的解决方案,而不是使用修补的 Maven)。settings.xml
配置为使用 HTTPS 存储库。它可以使用wget
,但出于某种非常奇怪的原因,mvn archetype:generate -X
(只是测试是否可以下载依赖项)它仍然打印它正在访问到Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
任何帮助,拜托.. ?