Залежні значення Maven не вдається з помилкою 501


154

Останнім часом 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 Required. -> [Help 2]

Чекаючи, коли Дженкінс закінчить збирати 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]


5
Ви використовуєте URL repo.maven.apache.org/maven2 для підключення до центрального Maven, замість цього використовуйте repo.maven.apache.org/maven2, тобто використовуйте з'єднання https
Manjunath HM

2
перевірити свої settings.xmlджинкіни на центральний URL Maven
varontron

Привіт Манджунат, у мене така ж проблема. Чи знаєте ви, як змусити maven використовувати HTTPS замість HTTP
Lahiru Madushanka

@Lahiru Madushanka перейдіть за посиланнями, тому ви отримаєте відповідь на своє запитання stackoverflow.com/questions/25393298/…
Manjunath HM

1
Я змінив версію Maven на 3.6.3 і досі вона показує ту ж помилку
dhS

Відповіді:


129

Причина спостережуваної помилки пояснюється в центральному 501 HTTPS Необхідному

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

Схоже, останні версії Maven (випробувані з 3.6.0, 3.6.1) вже використовують URL-адресу HTTPS за замовчуванням.

Ось дати переключення основних сховищ:

Ваша збірка Java може зламатися з 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 )


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

1
@JonathanLeitschuh, будь ласка, напишіть повну відповідь, за яку можна проголосувати і прийняти ...
Thorbjørn Ravn Andersen

1
Я використовую maven 3.6.0 на Ubuntu 18.04, але, схоже, не використовується URL https.
Ашутош

@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 будь-якої допомоги, будь ласка ..?
Джорджі Циклаурі

61

Я зіткнувся з тією ж проблемою. Я спробував два рішення, і обидва для мене добре працюють.

  • Оновіть сховище версії Maven (Maven version> = 3.2.3)
  • Обмежте поточну версію Maven, щоб використовувати HTTPS-посилання.

Оновіть сховище версії Maven:

Завантажте двійковий файл Apache Maven, який включає https-адреси за замовчуванням ( двійкові Apache Maven 3.6.3 ). І відкрийте діалогове вікно "Параметри" в інструментах панелі меню NetBeans ( діалогове вікно Java Maven ). І виберіть опцію перегляду у вікні Maven Home List (Перегляд вікна домашнього списку Maven ). Після додавання нещодавно завантаженої версії 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 для плагінів.
user1708042

Це також вирішило для мене, але я отримав ще одну помилку "Отримано фатальне попередження: протокол_версія", і мені довелося перейти на java 8, щоб виправити це, якщо хтось наткнеться на ту саму проблему.
Кім Тан

Я щаслива, що внесла внесок у розрив краватки. Ця відповідь стосувалася аналогічного питання, яке я відчував.
Brian Risk

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

Так, я замінив файл файл setu.xml, але, на жаль, він все ще не працює. Я все роблю правильно, чи потрібно змінити будь-який інший файл?
Sumeet Vishwas

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

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

1
Питання ОП говорить: "Я не впевнений, як змінити запити з HTTP на HTTPS". Ця відповідь не стосується питання.
wchargin

28

Спробуйте натиснути нижченаведену 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

Будь ласка, додайте його ( https://repo.maven.apache.org/maven2 ) у файл setu.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
Чи можете ви надати приклад повної настройки.xml, оскільки я безуспішно намагався додати вищезазначене у файл?
jhertz

Знайдений цей відповідь , який зробив розташування в файл чіткого, тепер він працює: 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 і це спрацювало добре: <repositories> <repository> <id> central repo https </id> <name> Центральний репозиторій Https </name> <url> repo.maven.apache.org/maven2</ URL > </repository> </repositories>.
лам

1
Дякую. Це працює в ubuntu 18.10, використовуючи Netbeans. Довелося встановити Maven додому до останньої версії Maven в Netbeans. Де ви знайшли це рішення?
Sanal S

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

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 Центральний доступ здійснює через HTTPS за замовчуванням maven.apache.org/docs/3.2.3/release-notes.html
farasath

12

Maven переходить до HTTPS і вимикає доступ HTTP

Коротка історія, з 15 січня 2020 року Maven Central сховище більше не підтримує HTTP-з'єднання (інші сховища роблять те саме). Тому ви вкажете свої параметри Maven / Gradle для використання URL-адреси HTTPS.

Рішення:

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

  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

Мене додали наступний сегмент коду до settings.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 замість Дженкінса. Кроки, які мені довелося зробити, щоб вирішити проблему:

  1. Мій проект знаходиться в GitLab, тому він використовує файл .yml, який вказує на зображення Докера, що я маю робити безперервну інтеграцію, а зображення, яке він використовує, має http: // maven URL-адреси . Тому я змінив це на https: // maven .
  2. Це ж зображення Dockerfile мала старішу версію Maven 3.0.1, яка давала мені проблеми лише на ніч. Я оновив Dockerfile, щоб отримати останню версію 3.6.3
  3. Потім я розгорнув це зображення у своєму інтернет-сховищі та оновив свій проект Maven ymlfile, щоб використовувати це нове зображення.
  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 \ конф \ 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

@tibortru Thanx Man, вже вирішив проблему. Я додав ці властивості до maven в IDE: maven.wagon.http.ssl.insecure = справжній 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, я скопіював налаштування keystore & truststore з Tomcat (setenv.sh) на свій jvm.config і тоді він працював!

Існує також можливість передати цю конфігурацію у "експорту MAVEN_OPTS" (при використанні mvn-генерації), але, хоча це зупинило помилку 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, ПричинаФраза: 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
де я
замінюю

3

Поділитися цим, якщо комусь це потрібно:

Стара конфігурація 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
Yudhistira Arya

1
Я спробував це в Помі, і це працює
Sathesh

Я теж спробував і працюю x2
Хав'єр J Соліс Флорес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.