Maven-зависимости терпят неудачу с ошибкой 501


154

В последнее время задания по сборке 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]

Ожидание, пока Jenkins завершит сбор data[ERROR]
Plugin 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]


5
Вы используете repo.maven.apache.org/maven2 url для подключения к maven central, вместо этого используйте repo.maven.apache.org/maven2, т.е. используйте соединение https
Manjunath HM

2
проверьте свой settings.xmlв jenkins на центральный URL maven
varontron

Привет Манджунатх, у меня та же проблема. Знаете ли вы, как заставить maven использовать HTTPS вместо HTTP
Лахиру Мадушанка

@Lahiru Madushanka перейдите по ссылкам, чтобы вы получили ответ на свой вопрос stackoverflow.com/questions/25393298/…
Manjunath HM

1
Я изменил версию maven на 3.6.3, и все равно она показывает ту же ошибку
dhS

Ответы:


130

Причина наблюдаемой ошибки объясняется в Central 501 HTTPS Требуется

С 15 января 2020 года центральное хранилище больше не поддерживает небезопасную связь по обычному HTTP и требует, чтобы все запросы к хранилищу шифровались по HTTPS.

Похоже, что последние версии Maven (с 3.6.0, 3.6.1) уже используют URL-адрес HTTPS по умолчанию.

Вот даты, когда основные репозитории переключатся:

Сборки Java могут прерваться с 13 января (если вы еще не переключили доступ репо к HTTPS)

Обновление: похоже на 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 )


26
Привет! Я оригинальный исследователь, который начал эту инициативу в отрасли. Вы также можете найти мой пост в блоге о важных датах здесь: medium.com/@jonathan.leitschuh/…
Джонатан Лейтшух

1
@JonathanLeitschuh, пожалуйста, напишите полный ответ, за который можно проголосовать и принять ...
Торбьерн Равн Андерсен

1
Я использую maven 3.6.0 в Ubuntu 18.04, но, похоже, он не использует https url.
Ашутош

@Ashutosh: то же самое с Maven 3.6.1 в Ubuntu 19.10. Я не уверен, почему это так, это может быть патч Ubuntu, но зачем они это делают?). Чтобы решить эту проблему, используйте любой из приведенных ниже ответов, которые обновляют 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 любой помощи, пожалуйста ..?
Георгий Циклаури

62

Я сталкиваюсь с той же проблемой. Есть два решения, которые я попробовал, и оба прекрасно работают для меня.

  • Обновление репозитория версий Maven (версия Maven> = 3.2.3)
  • Ограничьте текущую версию Maven использованием HTTPS-ссылок.

Обновите репозиторий версий Maven:

Загрузите двоичный файл Apache Maven, который включает в себя адреса https по умолчанию ( двоичный файл Apache Maven 3.6.3 ). И откройте диалоговое окно « Параметры» в инструментах панели меню NetBeans ( диалоговое окно Java Maven ). И выберите опцию просмотра в Maven Home List Box ( Просмотр списка Maven Home List Box ). После добавления новой загруженной версии 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
Ограничить текущую версию Maven для использования ссылок HTTPS: работал для меня.
Мохаммед Анас

В моем случае я пропустил часть <pluginRepository>, и я получал ошибки при использовании архетипов, потому что для плагинов по умолчанию был http для http.
user1708042

Это также исправило это для меня, но я получил еще одну ошибку «Received fatal alert: protocol_version», и мне пришлось переключиться на java 8, чтобы исправить это, на случай, если кто-нибудь столкнется с той же проблемой.
Ким Тан

Я рад, что внес свой вклад в разрыв связи. Этот ответ касался аналогичной проблемы, с которой я столкнулся.
Брайан Риск

36

С 15 января 2020 года центральное хранилище больше не поддерживает небезопасную связь по обычному HTTP и требует, чтобы все запросы к хранилищу шифровались по HTTPS .

Если вы получаете эту ошибку, вам необходимо заменить все URL-ссылки на Maven Central их каноническими аналогами HTTPS.

( источник )

Мы внесли следующие изменения в build.gradle моего проекта:

Старый:

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

Новое:

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

Да, у меня есть замена в файле setting.xml, но, к сожалению, он все еще не работает. Я делаю правильно или есть другие файлы, которые нужно изменить?
Сумит Вишвас

@SumeetVishwas Можете ли вы поделиться примером файла settings.xml?
Арунан Сугунакумар

3
@ArunanSugunakumar Я не изменился в файле settings.xml. Все что нужно поменять в POM. обновить центральное хранилище maven. Я поместил образец центрального хранилища в ветке ответов. пожалуйста, найдите ниже
Sumeet Vishwas

1
Вопрос ОП гласит: «Я не уверен, как изменить запросы с HTTP на HTTPS». Этот ответ не касается вопроса.
wchargin

28

Попробуйте нажать на ссылку ниже в любом браузере. Вернется 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>

1
Можете ли вы привести пример полного файла setting.xml, поскольку я безуспешно пытался добавить вышеуказанное в файл?
Джерц

Нашел этот ответ, который сделал расположение в файле более понятным, теперь он работает: stackoverflow.com/a/59784045/3120576
jhertz

22

Обновите центральный репозиторий 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, и это сработало: <репозитории> <репозиторий> <id> центральный репозиторий https </ id> <имя> Https центрального репозитория </ name> <url> repo.maven.apache.org/maven2</ url > </ repository> </ repositories>.
лам

1
Спасибо. Это работает в Ubuntu 18.10, используя Netbeans. Пришлось установить в Maven последнюю версию Maven в Netbeans. Где вы нашли это решение?
Санал С

Возможно, вам также придется обновить хранилище плагинов. По крайней мере, это нужно было сделать и для меня, чтобы исправить.
Ким Тан

16

Я использовал чистую установку Maven / Java на контейнере Docker.

Для меня мне пришлось 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? У меня та же проблема, но я не знаю, как это исправить!
Хан Ван Фам

@HanVanPham Я обновил свой maven до последней версии, в нем исправлена ​​эта проблема http.
mehulmpt

Для меня также отлично работала адаптация центрального безопасного блока в локальном файле settings.xml ($ HOME / .m2 / settings.xml).
t3az0r

13

Я использовал устаревшую версию Maven (3.0.3 и 3.1). Эти старые версии больше не поддерживают http-репозитории (как упомянуто выше). Обновление до Maven 3.6 было для меня исправлением.


1
В maven 3.2.3 центральный доступ по умолчанию осуществляется
farasath

12

Maven переходит на HTTPS и отключает доступ HTTP

Краткий рассказ: с 15 января 2020 года репозиторий Maven Central больше не поддерживает HTTP-соединения (другие репозитории делают то же самое). Поэтому вы укажете свои настройки Maven / Gradle для использования HTTPS URL.

Решение:

Вы можете выбрать один из следующих трех подходов.

  1. Добавьте репозиторий в 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>
  2. Добавьте репозиторий в профиль в 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>
  3. Обновите версию maven до новой, которая использует значения https по умолчанию. Самый последний на данный момент 3.6.3 Скачать здесь

Для Gradle:

Замените только URL для версии HTTPS.

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

Для обновления (с 3.3.9 до 3.6.3) вам нужно сначала полностью удалить старую версию? Или просто установить последнюю версию?
BigRedEO

1
@BigRedEO В вашей среде может быть несколько версий maven. Однако ваши переменные $M2_HOMEили $PATH переменные env будут указывать только на одну из них, которая будет вашей версией по умолчанию maven. Я бы предпочел удалить старую версию перед установкой новой. Но это зависит от ваших потребностей.
Адам М. Гамбоа Г.

10

Я был добавлен следующий сегмент кода в 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>

9

У меня та же проблема, но я использую GitLab вместо Jenkins. Шаги, которые я должен был сделать, чтобы преодолеть проблему:

  1. Мой проект находится в GitLab, поэтому он использует файл .yml, который указывает на образ Docker, который я должен выполнять непрерывную интеграцию, а используемый ими образ имеет URL-адреса http: // maven . Поэтому я изменил это на https: // maven .
  2. В том же образе Dockerfile была более старая версия Maven 3.0.1, которая доставляла мне проблемы буквально за одну ночь. Я обновил Dockerfile, чтобы получить последнюю версию 3.6.3
  3. Затем я развернул этот образ в своем онлайн-хранилище и обновил свой yml-файл проекта Maven, чтобы использовать этот новый образ.
  4. И, наконец, я обновил POM-файл моих основных проектов, указав ссылку на https: // maven ... вместо http: // maven

Я понимаю, что это более конкретно для моей установки. Но без выполнения всех вышеперечисленных шагов я все равно продолжаю получать это сообщение об ошибке Return code is: 501 , ReasonPhrase:HTTPS Required


Не могли бы вы поделиться своим Dockerfile?
Хан Ван Фам

8

Как указывалось в других ответах, 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

Для всех корпоративных кодеров, в идеале, если вы получаете эту ошибку, это означает, что ваша кодовая база все еще создается из сообщества открытого исходного кода. Вам необходимо перегрузить «центральный» репозиторий у своего менеджера репозитория 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 репозитория.

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


После добавления зеркала в разделе зеркал у меня появляется ошибка, что узел не аутентифицирован. Что мне теперь делать? Спасибо!
Димсон

@dimson Это означает, что вы пытались соединиться с https, но у вас не было сертификата для аутентификации, возможно, из-за того, что в Java его нет. Импортируйте сертификат из репозитория в хранилище ключей Java или обновите Java.
тибортру

@tibortru Thanx Man, уже решить проблему. Я добавил эти свойства в maven в IDE: 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. После этого все работает нормально.
Димсон

Ну, это другой путь.
Небезопасный

7

Для меня (корпоративного кодера) также добавлено зеркальное хранилище в settings.xmlисправленной проблеме. Я также использую 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?
Хан Ван Фам

Конечно! В нашем Dockerfile мы сначала помещаем его во временную папку, например, так: echo "<settings> <mirrors> .... </ mirrors> </ settings>"> /tmp/maven-settings.xml. Затем мы запускаем maven с опцией «-s» и передаем путь к файлу настроек, например, «mvn -s /tmp/maven-settings.xml clean». Надеюсь, поможет!
Оскар Драй

@ han-van-pham вы найдете его в $ HOME / .m2 /. Если нет, создайте его там.
dr0i

4

Использование 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, я скопировал конфигурацию хранилища ключей и доверенных сертификатов из Tomcat (setenv.sh) в мой jvm.config, и тогда это сработало!

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

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

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


4

Та же проблема имеет место и для jcenter .

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

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

вместо

repositories {
jcenter ()
//others
}

использовать этот:

repositories {
jcenter { url "http://jcenter.bintray.com/"}
//others
}

4

Ошибка:

Не удалось передать файл: 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 »

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

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


2
где я могу заменить этот URL
DHS

3

Поделиться этим на случай, если кому-то это нужно:

Конфигурация Old 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. Удачного кодирования :)


3

Моя текущая среда не поддерживает 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

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

1
Я попробовал это в Pom, и это работает
Sathesh

я тоже попробовал и работаю х2
Хавьер Дж Солис Флорес
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.