Невозможно сделать Maven использовать HTTPS, несмотря на конфигурации settings.xml где я репозитории с HTTPS

Гиорги Циклаури:

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

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

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

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

<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-плагин очистки: 2,5: плагин org.apache.maven.plugins: Maven-плагин очистки: 2,5 или один из его зависимостей не может быть решена : Не удалось прочитать артефакт дескриптор для org.apache.maven.plugins: Maven-плагин очистки: баночка: 2.5 Загрузка: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven- установить-плагин / 2,3 / Maven-плагин-установить-2.3.pom[ВНИМАНИЕ] Не удалось получить плагин дескриптор org.apache.maven.plugins: Maven-INSTALL-плагин: 2,3: Плагин org.apache.maven.plugins: Maven-установки-плагин: 2.3 или один из его зависимостей не может быть решена : Не удалось прочитать артефакт дескриптор org.apache.maven.plugins: Maven-установки-плагин: баночка: 2,3 Загрузка: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven- развернуть-плагин / 2.7 / Maven-плагин-развернуть-2.7.pom [ПРЕДУПРЕЖДЕНИЕ] Не удалось получить плагин дескриптор для org.apache.maven.plugins: Maven-плагин-развернуть: 2.7: Plugin org.apache.maven.plugins: Maven -Развертывание-плагин: 2.7 или один из его зависимостей не может быть решена: не удалось прочитать артефакт дескриптор для org.apache.maven.plugins: Maven развернуть-плагин: банку: 2,7 скачивание:http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-site-plugin/3.0/maven-site-plugin-3.0.pom [ВНИМАНИЕ] Не удалось получить плагин дескриптор для орг. apache.maven.plugins: Maven-сайт-плагин: 3,0: плагин org.apache.maven.plugins: Maven-сайт-плагин: 3,0 или один из его зависимостей не может быть решена: не удалось прочитать артефакт дескриптор org.apache. maven.plugins: Maven-сайт-плагин: баночка: 3,0 Загрузка: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.3/maven-antrun-plugin -1.3.pom[ПРЕДУПРЕЖДЕНИЕ] Не удалось получить плагин дескриптор для org.apache.maven.plugins: Maven-antrun-плагин: 1.3: плагин org.apache.maven.plugins: Maven-antrun-плагин: 1.3 или один из его зависимостей не может быть решена : Не удалось прочитать артефакт дескриптор для org.apache.maven.plugins: Maven-antrun-плагин: баночка: 1.3 Загрузка: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven- Узел-плагин / 2,2-бета-5 / Maven-сборочно-плагин-2,2-бета-5.pom [ПРЕДУПРЕЖДЕНИЕ] Не удалось получить плагин дескриптор для org.apache.maven.plugins: Maven сборки-плагин: 2,2-бета- 5: плагин org.apache.maven.plugins: Maven сборки-плагин: 2,2-бета-5 , или один из его зависимостей не может быть решена: не удалось прочитать артефакт дескриптор org.apache.maven.plugins: Maven-assembly- плагин: банка: 2,2-бета-5 Загрузка:http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.1/maven-dependency-plugin-2.1.pom [ВНИМАНИЕ] Не удалось получить плагин дескриптор для орг. apache.maven.plugins: Maven-плагин зависимостями: 2,1: плагин org.apache.maven.plugins: Maven-зависимость-плагин: 2,1 или один из его зависимостей не может быть решена: не удалось прочитать артефакт дескриптор org.apache. maven.plugins: Maven-зависимость-плагин: баночка: 2.1 Загрузка: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.0/maven-release-plugin -2.0.pom[ПРЕДУПРЕЖДЕНИЕ] Не удалось получить плагин дескриптор для org.apache.maven.plugins: Maven-релиз-плагин: 2.0: плагин org.apache.maven.plugins: Maven-релиз-плагин: 2.0 или один из его зависимостей не может быть решена : Не удалось прочитать артефакт дескриптор для org.apache.maven.plugins: Maven-релиз-плагин: банку: 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 [ПРЕДУПРЕЖДЕНИЕ] не удалось перенести метаданные 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 ): Не удалось файла переноса: HTTP: //repo.maven .apache.org / Maven2 / орг / Codehaus / харизма / 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 / орг / Codehaus / харизма / Maven-metadata.xml . Код возврата: 501, ReasonPhrase: HTTPS Обязательный .

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

Гиорги Циклаури:

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

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

1) [ВНИМАНИЕ] Не удалось получить плагин дескриптор .. (независимо от плагина имя) предупреждения в течение почти любой стадии сборки (чистый, упаковка или т.п.), который говорит , что (важно >>) извлечение из плагина дескрипторы или его зависимостей ( что означает плагин , а не зависимости проекта !) не будет успешным.

Причина этого (в данном случае) является то , что Maven попытки общаться с конечной точкой машины (хранилище) через HTTP (как вы видите цитаты на вопрос в), несмотря на то (!), Что я настроен свой конфигурационный .m2\settings.xmlфайл и все записи хранилища определений определяются с HTTPS , соответственно, кажется, мавена должны пытаться все через HTTPS ..но нет, он использует 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) коллегиально не с проверкой подлинности следует код возврата: 501, ReasonPhrase: HTTPS Обязательный.

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

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

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

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

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

рекомендация

отhttp://10.200.1.11:23101/article/api/json?id=478681&siteId=1