Maven-зависимости терпят неудачу с ошибкой 501 - PullRequest
156 голосов
/ 16 января 2020

В последнее время Maven задания по сборке, работающие в Jenkins , терпят неудачу, за исключением следующего случая: они не могут получить зависимости от 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]

Ожидание Дженкинс до финиша sh сбор 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]

Ответы [ 19 ]

8 голосов
/ 17 января 2020

Как указано в других ответах, 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 при необходимости.

7 голосов
/ 18 января 2020

Для меня (корпоративный кодер) также добавление зеркального хранилища в settings.xml исправило проблему. Я также использую Maven внутри контейнера docker.

<mirrors>
    <mirror>
        <id>https-mirror</id>
        <name>Https Mirror Repository</name>
        <url>https://repo1.maven.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>
7 голосов
/ 16 января 2020

Для всех корпоративных кодеров, в идеале, если вы получаете эту ошибку, это означает, что ваша кодовая база все еще создается из сообщества открытого исходного кода. Вам нужно перегрузить «центральный» репозиторий с помощью собственного менеджера репозитория Maven компании.

Вы можете go изменить настройки. xml и переопределить URL центрального репозитория с http: // на https : //

<M2_HOME>/conf/settings.xml

Найдите разделы mirrors и добавьте следующую запись:

    <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-репозитория.

Как упоминалось в других ответах, начиная с 15 января 2020 года, центральный репозиторий Maven не поддерживает небезопасную связь по обычному HTTP.

4 голосов
/ 27 января 2020

Ошибка:

Не удалось передать файл: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom.

Код возврата: 501, ReasonPhrase: требуется HTTPS.

Root анализ причин:

Maven central ожидает, что клиенты используют https, но клиент делает только простой HTTP-запрос.

Поэтому запрос на загрузку пакета с именем 'wagon-s sh -2.1.pom' не выполнен.

Как устранить проблему?

Заменить URL "http://repo.maven.apache.org/maven2"

с "https://repo.maven.apache.org/maven2"

в pom. xml файле или файле build.gradle из проект.

4 голосов
/ 22 января 2020

Та же проблема возникает и для jcenter .

С 13 января 2020 года Jcenter доступен только по HTTPS.

Получение проектов их зависимости, использующие то же самое, начнут сталкиваться с проблемами. Для быстрых исправлений сделайте следующее в своем build.gradle

вместо

repositories {
jcenter ()
//others
}

используйте это:

repositories {
jcenter { url "http://jcenter.bintray.com/"}
//others
}
4 голосов
/ 19 января 2020

Используя Ubuntu 16.04, java 1.8.0_201.

Я удалил старый maven и установил Maven 3.6.3, все еще получал эту ошибку, что зависимости Maven не работают с ошибкой 501.

Понял, что это может быть проблема склада доверенных сертификатов / хранилища ключей, связанная с требованием https. Обнаружил, что теперь вы можете настроить параметры -Djavax с помощью файла jvm.config, см .: https://maven.apache.org/configure.html.

Поскольку я также использую Tomcat, я скопировал конфигурацию keystore & truststore из Tomcat ( setenv. sh) на мой jvm.config и тогда это сработало!

Также есть возможность передать этот конфиг в 'export MAVEN_OPTS' (при использовании mvn generate), но хотя это остановило ошибку 501, она создала другую: она ожидала файл pom.

Создание отдельного файла jvm.config прекрасно работает, просто поместите его в root вашего проекта.

Надеюсь, это кому-нибудь поможет, у меня ушел целый день, чтобы разобраться!

3 голосов
/ 03 февраля 2020

Моя текущая среда не поддерживает HTTPS, поэтому добавление небезопасной версии репозитория решило мою проблему: 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>
3 голосов
/ 26 января 2020

Совместное использование в случае, если это кому-то нужно:

Старый конфиг 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. Удачного кодирования:)

0 голосов
/ 16 января 2020

Добавьте следующий репозиторий в 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>

...