Невозможно заставить maven использовать HTTPS несмотря на настройки. xml конфигурация, где у меня есть репозитории с HTTPS - PullRequest
3 голосов
/ 06 февраля 2020

Я исследовал почти все веб-сайты StackOverflow, Apache и все, что мог сделать за один день, но не смог заставить это работать.

У меня Maven 3.0.5 с настройкой Jdk8 ( это для определенного стека, и версии не будут пересматриваться) в среде Vagrant. Мне известно о решении Apache заставить все репозитории Maven использовать только HTTPS, в противном случае клиенты Maven не будут обращаться к серверам репозитория.

Похоже, я настроил все необходимые параметры в моем ~/.m2/settings.xml и по какой-то очень странной причине, когда я запускаю любую команду (любую фазу сборки, скажем, mvn clean), Maven по умолчанию использует HTTP и не заботится о настройках. xml - он все еще пытается загрузить ссылки / зависимости с протоколом HTTP.

Пример моего settings.xml (Для простоты я удалил данные проекта c и оставил только это, это даже не работает)

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                    https://maven.apache.org/xsd/settings-1.0.0.xsd">
<repositories>
  <repository>
    <id>central</id>
    <url>https://repo1.maven.org/maven2/</url>
  </repository>

  <repository>
    <id>central</id>
    <url>https://repo.maven.apache.org/maven2/</url>
  </repository>
</repositories>

и вот что я получаю для тестовой команды mvn archetype:generate (проблема сохраняется для любых других команд этапа сборки)

[INFO] Сканирование проектов .. Загрузка: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom [ПРЕДУПРЕЖДЕНИЕ] Не удалось получить дескриптор плагина для org. apache .maven.plugins: maven-clean-plugin: 2.5: Плагин org. apache .maven.plugins: maven-clean-plugin: 2.5 или один из его зависимых Не удалось разрешить ошибки: не удалось прочитать дескриптор артефакта для org. apache .maven.plugins: maven-clean-plugin: jar: 2.5 Загрузка: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.3/maven-install-plugin-2.3.pom [WARNING] Не удалось получить дескриптор плагина для организации. apache .maven.plugins: maven-install-plugin: 2.3: Плагин org. apache .maven.plugins: maven-install-plugin: 2.3 или одна из его зависимостей не может быть разрешена: не удалось прочитать дескриптор артефакта для org. apache .maven.plugins: maven-install-plugin: jar: 2.3 Скачивание: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-deploy-plugin/2.7/maven-deploy-plugin-2.7.pom [WARNING] Не удалось получить дескриптор плагина для org. apache .maven. plugins: maven-deploy-plugin: 2.7: Плагин org. apache .maven.plugins: maven-deploy-plugin: 2.7 или одна из его зависимостей не может быть разрешена: не удалось прочитать дескриптор артефакта для org. apache. maven.plugins: maven-deploy-plugin: jar: 2.7 Скачивание: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-site-plugin/3.0/maven-site-plugin-3.0.pom [ПРЕДУПРЕЖДЕНИЕ] Не удалось получить дескриптор плагина для org. apache .maven.plugins: maven-site-plugin: 3.0 : Плагин org. apache .maven.plugins: maven-site-plugin: 3.0 или одна из его зависимостей c не может быть решена: не удалось прочитать дескриптор артефакта для org. apache .maven.plugins: maven-site-plugin: jar: 3.0 Загрузка: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.3/maven-antrun-plugin-1.3.pom [WARNING] Не удалось получить дескриптор плагина для org. apache .maven.plugins: maven-antrun-plugin: 1.3: Плагин org. apache .maven.plugins: maven-antrun-plugin: 1.3 или одна из его зависимостей не может быть разрешена: не удалось прочитать артефакт дескриптор для org. apache .maven.plugins: maven-antrun-plugin: jar: 1.3 Скачивание: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-5/maven-assembly-plugin-2.2-beta-5.pom [WARNING] Не удалось получить дескриптор плагина для org. apache .maven.plugins : maven-assembly-plugin: 2.2-beta-5: Плагин org. apache .maven.plugins: maven-assembly-plugin: 2.2-beta-5 или одна из его зависимостей не может быть разрешена: не удалось прочитать дескриптор артефакта для org. apache .maven.plugins: maven-assembly-plugin: jar: 2.2-beta-5 Скачивание: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.1/maven-dependency-plugin-2.1.pom [WARNING] Не удалось получить дескриптор плагина для org. apache. maven.plugins: maven-dependency-plugin: 2.1: Плагин org. apache .maven.plugins: maven-dependency-plugin: 2.1 или не удалось разрешить одну из его зависимостей: Не удалось прочитать дескриптор артефакта для org. apache .maven.plugins: maven-dependency-plugin: jar: 2.1 Загрузка: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.0/maven-release-plugin-2.0.pom [WARNING] Не удалось выполнить получить дескриптор плагина для org. apache .maven.plugins: maven-release-plugin: 2.0: Плагин org. apache .maven.plugins: maven-release-plugin: 2.0 или одна из его зависимостей не может быть разрешена: Не удалось прочитать дескриптор артефакта для org. apache .maven.plugins: maven-release-plugin: jar: 2.0 Скачивание: http://repo.maven.apache.org/maven2/org/codehaus/mojo/maven-metadata.xml Скачивание: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-metadata.xml [ПРЕДУПРЕЖДЕНИЕ] Не удалось передать метаданные орг. apache .maven.plugins / maven-metadata. xml from / to central (http://repo.maven.apache.org/maven2): Не удалось передать файл: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-metadata.xml. Код возврата: 501, ReasonPhrase: требуется HTTPS. [ПРЕДУПРЕЖДЕНИЕ] Не удалось передать метаданные org.codehaus.mojo / maven-metadata. xml из / в центральное (http://repo.maven.apache.org/maven2): не удалось передать файл: http://repo.maven.apache.org/maven2/org/codehaus/mojo/maven-metadata.xml , Код возврата: 501, ReasonPhrase: требуется HTTPS. [ПРЕДУПРЕЖДЕНИЕ] Сбой передачи org. apache .maven.plugins / maven-metadata. xml из http://repo.maven.apache.org/maven2 был кэширован в локальном репозитории, разрешение не будет повторяться до интервала обновления Прошло центральное или принудительное обновление. Исходная ошибка: не удалось передать метаданные org. apache .maven.plugins / maven-metadata. xml из / в центральный (http://repo.maven.apache.org/maven2): не удалось передать файл: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-metadata.xml. Код возврата: 501, ReasonPhrase: требуется HTTPS. [ПРЕДУПРЕЖДЕНИЕ] Сбой передачи org.codehaus.mojo / maven-metadata. xml из http://repo.maven.apache.org/maven2 был кэширован в локальном хранилище, разрешение не будет повторно предпринято до тех пор, пока не истечет интервал обновления центрального сервера или обновления являются принудительными. Исходная ошибка: не удалось передать метаданные org.codehaus.mojo / maven-metadata. xml из / в центральное (http://repo.maven.apache.org/maven2): не удалось передать файл: http://repo.maven.apache.org/maven2/org/codehaus/mojo/maven-metadata.xml , Код возврата: 501, ReasonPhrase: Требуется HTTPS .

Что мне делать? как видите, при использовании HTTP я получаю соответственно HTTP 501.

Ответы [ 3 ]

2 голосов
/ 06 февраля 2020

В вашем случае он работает для зависимостей, но не для плагинов. Вам необходимо определить <profile>, то есть activeByDefault и содержащий раздел <pluginRepositories/> для моментальных снимков и выпусков.

Maven имеет два типа репозиториев:

  • Для зависимостей

  • Для плагинов

Раздел <mirrorOf> обрабатывает только репозитории зависимостей.

1 голос
/ 07 февраля 2020

Поскольку я провел весь день с этим, я думаю, что стоит поделиться опытом, результатами отладки и способом решения этой проблемы.

Было две проблемы:

1) [ПРЕДУПРЕЖДЕНИЕ] Не удалось получить дескриптор плагина для .. (независимо от имени плагина) предупреждений практически на любом этапе сборки (clean, package или et c.), Который говорит, что (важно >>) извлечение дескрипторов плагинов или их зависимостей (что означает плагинов , а не зависимостей проекта !) не проходит успешно.

Причина это (в данном случае) то, что maven пытается связаться с конечной машиной (хранилищем) через HTTP (как вы видите в цитате вопроса), несмотря на факт ( !), что я настроил свой файл конфигурации .m2\settings.xml, и все записи определения репозитория определены с HTTPS , соответственно, похоже, что maven должен попробовать все через HTTPS .. но нет, он использует * 1 024 * HTTP для плагинов и любая HTTP-связь с репозиториями maven запрещена с 15 января 2020 года .

Способ, который я решил, - определить и настроить <profiles/> и <pluginRepositories/>, как @ carlspring предложил , но мне пришлось немного уточнить и расширить этот ответ. Итак, вот мой готовый settings.xml пример: (обратите внимание, что просто для безопасности я предоставил альтернативные репозитории в обоих - профилях и репозиториях)

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"                                                                                                                                     $    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                        https://maven.apache.org/xsd/settings-1.0.0.xsd">

<profiles>
<profile>
   <id>ssl-profile</id>
   <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <repositories>
        <repository>
            <id>central-1</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>central-2</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</profile>
  <repositories>
    <repository>
      <id>central1</id>
      <url>https://repo1.maven.org/maven2/</url>
    </repository>
    <repository>
      <id>central2</id>
      <url>https://repo.maven.apache.org/maven2/</url>
    </repository>
  </repositories>
  </profiles>
</settings>

После того, как это было решено, и, наконец, Maven взял это конфигурации и начал пытаться подключиться ко всем репозиториям через HTTPS , у меня была другая - 2-я проблема.

2) одноранговый узел не аутентифицирован с последующим Return код: 501, ReasonPhrase: требуется HTTPS.

Это было немного сложно, но способ решить эту проблему - поиграть с файлом truststore cacerts. Сначала проверьте, есть ли у вас файл склада доверенных сертификатов cacerts и пустой он или нет! оно не должно быть пустым , и это очень важно. Похоже на OpenJDK11 и некоторые другие сборки в некоторых дистрибутивах Windows / Linux, файл cacerts отсутствует или пуст; однако, по моим наблюдениям, он присутствовал в OracleJDK сборках.

  • На Windows сборках он должен быть под %JAVA_HOME%\lib\security\;
  • На Linux сборках , он может варьироваться (в зависимости от дистрибутива Linux и вашей настройки), но в моем случае он был в папке /etc/ssl/certs (и я думаю, что это папка сертификатов Linux, а не Java).

Если вы видите (и вы, скорее всего, видите, если у вас есть проблема peer not authenticated ), что у вас либо нет файла cacerts, либо он пуст (просто проверьте размер файла, он должен быть больше нескольких бит), вы можете:

  • Просто скопировать и вставить существующий cacerts файл из другой сборки Jdk / Jre;
  • Создайте a cacerts файл склада доверенных сертификатов и добавьте в него сертификат (ы) (в этом случае вам нужно будет добавить столько сертификатов, сколько вам нужно, поэтому, возможно, проще go просто copy-paste)

Надеюсь, это поможет.

0 голосов
/ 06 февраля 2020

Я бы предложил go следующий путь:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">

  <mirrors>
    <mirror>
      <id>central</id>
      <name>central</name>
      <url>https://repo1.maven.org/maven2/</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>

</settings>

Это перенаправит весь запрос через вышеуказанный URL. Если у вас есть менеджер репозитория внутри вашей корпоративной среды, лучше использовать его и позволить менеджеру репо обрабатывать https.

Также обновление Maven до последней версии 3.6.3, и я полагаю, что вы не используя самые последние версии плагинов, которые я настоятельно рекомендую обновить, было много улучшений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...