最近,在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]


当前回答

如果您使用的是旧版本的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 url。

其他回答

我在最新版本(2020年8月)遇到了这个问题(在这台机器上很久没有使用Maven了),在阅读这些答案后,为什么它仍然是一个问题,我摸不着头脑。

原来我在我的主目录的.m2/文件夹里有一个旧的settings.xml,其中有一些多年前的自定义。

然而,即使删除了那个文件,我也无法解决这个问题。我最终删除了整个。m2文件夹。 我认为除了下载的资源,里面没有其他东西。也许仅仅删除repository/org/apache/maven/ prototype这样的文件夹就足够了。

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

自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 Central发出请求需要https,而旧版本的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中禁用/覆盖它。

错误:

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

返回代码是:501,ReasonPhrase:HTTPS Required。

根本原因分析:

Maven中心期望客户端使用https,但客户端只发出普通的HTTP请求。

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

如何解决这个问题?

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

与“https://repo.maven.apache.org/maven2”

在pom.xml文件或构建。项目的Gradle文件。