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


当前回答

自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" }
}

其他回答

所观察到的错误的原因在中央501 HTTPS要求中有解释

自2020年1月15日起,中央存储库不再支持 在纯HTTP上的不安全通信,并要求所有请求 通过HTTPS加密到存储库。

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

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

你的Java构建可能会在1月13日开始崩溃(如果你还没有切换到HTTPS)

更新:似乎从maven 3.2.3 maven中心是通过HTTPS访问的 参见https://stackoverflow.com/a/25411658/5820670

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

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

My project is in GitLab so it uses the .yml file which points to a Docker image I have to do continuous integration, and the image it uses has the http://maven URLs. So I changed that to https://maven. That same Dockerfile image had an older version of Maven 3.0.1 that gave me issues just overnight. I updated the Dockerfile to get the latest version 3.6.3 I then deployed that image to my online repository, and updated my Maven project ymlfile to use that new image. And lastly, I updated my main projects POM file to reference https://maven... instead of http://maven

我意识到这更适合我的设置。但是如果不执行上述所有步骤,我仍然会继续得到这个错误消息 返回代码是:501,ReasonPhrase:HTTPS Required

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

如果您使用的是旧版本的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年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" }
}