Поскольку я провел весь день с этим, я думаю, что стоит поделиться опытом, результатами отладки и способом решения этой проблемы.
Было две проблемы:
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)
Надеюсь, это поможет.