Хочу поделиться своим опытом использования maven через прокси.
Скорее всего, вы столкнетесь с исключениями и сообщениями вроде:
метаданные репозитория для: 'org.apache.maven.plugins' не могут быть получены из репозиторий: центральный из-за ошибки: Ошибка при передаче файла: В соединении отказано: подключиться
или
[ВНИМАНИЕ] Не удалось получить дескриптор плагина для org.apache.maven.plugins: maven-clean- plugin: 2.5: Плагин org.apache.maven.plugins: maven-clean-plugin: 2.5 или один из его не удалось разрешить зависимости: не удалось прочитать дескриптор артефакта для org.apache.maven.plugins: Maven-плагин очистки: банка: 2,5
Как настроить Maven для использования прокси-сервера?
Ответы:
Подробнее о настройке прокси для Maven см. В мини-руководстве .
По сути, вам необходимо убедиться, что раздел прокси в глобальных настройках (
[maven install]/conf/settings.xml
) или пользовательских настройках (${user.home}/.m2/settings.xml
) настроен правильно. Лучше сделать это в ваших пользовательских настройках, чтобы не хранить пароль в виде обычного текста в общедоступном месте.В Maven 2.1 введено шифрование паролей , но я не успел проверить, применяется ли шифрование к настройкам прокси, а также к паролям репозитория (хотя не понимаю, почему это не так).
Для информации: в файле settings.xml есть закомментированная конфигурация прокси и инструкции по ее изменению.
В мини-руководстве ваши настройки должны выглядеть примерно так:
источник
<username>
и<password>
элементы должны быть удалены (и не дали пустое содержание). Мне потребовалось время, чтобы понять.Как использовать прокси-сервер socks?
Настройте где-нибудь SSH-туннель к серверу:
Linux (bash):
Окна:
источник
MAVEN_OPTS
- единственный способ заставить Maven загружаться через HTTPS. Использование прокси HTTP или HTTPS черезMAVEN_OPTS
илиsettings.xml
приводит кorg.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec execute INFO: I/O exception (java.net.SocketException) caught when processing request to {tls}->http://proxy.mycompany.com:911->https://repo.maven.apache.org:443: SOCKS: TTL expired
http
доверенных лиц:export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=$PORT"
MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080" mvn clean install
Следующиеmvn
команды в том же сеансе будут без прокси.У меня тоже была эта проблема, и я решил ее, отредактировав
settings.xml
файл в своей.m2
папке. Мойsettings.xml
сейчас такой:источник
Также обратите внимание, что некоторые плагины (на ум приходят удаленные ресурсы) используют действительно старую библиотеку, которая принимает конфигурацию прокси только через MAVEN_OPTS;
Вы могли застрять на авторизации для этого.
источник
Чтобы установить Maven Proxy :
Отредактируйте сеанс прокси в вашем файле ~ / .m2 / settings.xml . Если вы не можете найти файл, создайте его.
или
Отредактируйте сеанс прокси в вашем {M2_HOME} /conf/settings.xml
Надеюсь, поможет.. :)
источник
Скорее всего, это вызвано двумя проблемами:
Если некоторые из них не указаны - maven может вывести случайные сообщения об ошибках.
Надеюсь, что я спас кого-то от поиска в Google по этой проблеме в течение 6 часов, как и я.
источник
Просто чтобы добавить свой собственный опыт в этом: прокси моей компании
http://webproxy.intra.companyname.com:3128
. Чтобы maven работал через этот прокси, настройки должны быть точно такими , как этоВ отличие от некоторых других файлов конфигурации прокси,
protocol
здесь описывается, как подключиться к прокси-серверу, а не какие типы протоколов следует проксировать.http
Часть мишени должна быть отделилась от имени хоста, иначе он не будет работать.источник
Спасибо @krosenvold.
Если изменения файла настроек не работают, попробуйте это в командной строке с файлом POM.
Это помогло мне сразу после смены пароля.
источник
Я запускаю
cntlm
локально, настроилNTLMv2
хэши паролей для аутентификации с корпоративным прокси и используюиспользовать этот прокси из
maven
. Конечно, используемый вами прокси должен поддерживатьcntlm
/NTLMv2
.источник
[Environment]::SetEnvironmentVariable("MAVEN_OPTS", "-DproxyHost=127.0.0.1 -DproxyPort=3128", "Machine")
И чтобы добавить к этой теме, вот мой опыт ниже ... Действительно странно и требует много времени, поэтому я подумал, что стоит добавить.
У меня была аналогичная проблема при попытке построить портлет-мост в Windows со следующими ошибками:
После небольшого серфинга я попробовал пару вещей:
Пытался установить parent.relativePath как пустой, чтобы maven не считал родительский элемент локальным. Это в соответствии с предложением о SO при сбое сборки Hudson: неразрешимый родительский POM и на этом форуме . Это не подействовало.
Я также попытался убедиться, что репозиторий явно указан в моем settings.xml, но это тоже не повлияло.
Затем я убедился, что mvn был вынужден искать в репозитории, а не полагаться на его собственную историю, как это обсуждалось в этом блоге Сартоном . К сожалению, это тоже не проблема.
В некотором отчаянии я затем повторно просмотрел свой MAVEN_OPTS, чтобы убедиться, что я не нарушаю свои настройки прокси. Они были правильными, хотя и без указания значения:
Итак, наконец, я переместил конфигурацию прокси в свой settings.xml, и это сработало:
На самом деле не уверен, почему мой оригинальный MAVEN_OPTS не работал (кавычки?), А конфигурация settings.xml работала. Я хотел бы отменить исправление и снова проверить каждый шаг, но потратил слишком много времени. Отчитаюсь как и когда.
источник
Я знаю, что это не совсем ответ на вопрос, но, возможно, стоит узнать об этом, если кто-то ищет этот пост. Также можно установить прокси-сервер репозитория Maven, например nexus .
Ваш maven будет настроен для связи с локальным прокси-сервером Nexus, а затем Nexus будет извлекать (и кэшировать) артефакты. Его можно настроить через веб-интерфейс и поддерживает (http) прокси).
Это может быть преимуществом, особенно в условиях компании, поскольку артефакты доступны локально и могут быть загружены быстро, и вы больше не зависите от доступности внешних репозиториев Maven.
Ссылка на вопрос; с Nexus есть красивый графический интерфейс для настройки прокси, и это нужно делать только в одном месте, а не для каждого разработчика.
источник
если вы новичок в настройке прокси для Maven В моем случае сначала проверьте свою домашнюю папку, есть ли
.m2
в ней папка, и в ней должен быть файл с именем,settings.xml
если не создать его, вставьте его и измените,host
аport
затем, если необходимо, изменитеnonProxyHosts
Если в любом случае это не поможет, перейдите и внесите изменения в этом месте домашней папки.
Я использую Eclipse в качестве среды IDE.
Надеюсь, это поможет !!
Примечание. Чтобы удалить прокси, просто переместитесь
settings.xml
в другое место.источник
Если maven работает через прокси, но не работает с некоторыми плагинами, которые он вызывает, попробуйте
JAVA_TOOL_OPTIONS
также выполнить настройку с помощью-Dhttp*.proxy*
настроек.Если вы уже
JAVA_OPTS
сделалиисточник
За исключением упомянутых выше методов, с некоторыми усилиями вы можете запустить maven через прокси с помощью библиотеки jproxyloader (на странице есть пример, как это сделать: http://jproxyloader.sourceforge.net/ ). Это позволяет настроить socks-прокси только для загрузки артефактов.
В решении, упомянутом duanni (установка -DsocksProxyHost), есть одна проблема. Если у вас есть интеграционные тесты, работающие с локальной базой данных (или другие тесты, подключающиеся к URL-адресу, который не должен проходить через прокси). Эти тесты перестанут работать, потому что подключения к базе данных также будут направлены на прокси. С помощью jProxyLoader вы можете настроить прокси только для хоста nexus. Кроме того, если вы хотите, вы можете передавать подключения к базе данных через другой прокси.
источник
Иногда вам нужно добавить другие
<proxy></proxy>
теги и указать https в тегах протокола:<protocol>https</protocol>
источник
Вышеупомянутые сообщения помогли в решении моей проблемы. В дополнение к вышесказанному мне пришлось внести следующие изменения, чтобы он заработал:
Изменены сетевые настройки Maven JRE (\ jre \ lib \ net.properties) для использования системных настроек прокси.
Включены настройки прокси-сервера в settings.xml. Я не предоставил настройки имени пользователя и пароля для использования аутентификации NTLM.
источник
Maven предоставляет встроенный метод для этого через файл с именем settings.xml , и это было описано в других ответах. Однако обычно, особенно в Linux, инструменты командной строки автоматически используют прокси, указанный в переменной среды
https_proxy
.Чтобы следовать принципу « Не повторяйся» (который призван помочь избежать ошибок), было бы неплохо, если бы
mvn
бы можно было автоматически работать и с ним.Вот сценарий оболочки, который выполняет необходимые преобразования:
Вы можете назвать это как-нибудь
proxied_mvn
и запустить как:В качестве альтернативы вы можете просто переместить настройку среды в свои сценарии запуска.
подводные камни
Есть много вещей, которые могут пойти не так при попытке настроить Maven для доступа к Nexus через прокси. Надеюсь, этот сценарий поможет с некоторыми из самых привередливых проблем, но другие останутся:
Учетные данные Nexus доступны и верны (только при необходимости)
Проверить с
mvn help:effective-settings
Кэширование Maven: «разрешение не будет повторяться»
mvn clean package --update-snapshots
Вывод Maven в виде стены текста - вы должны внимательно посмотреть на вывод, чтобы убедиться, что сообщения об ошибках не сильно отличаются между запусками
Более старые версии Java могут потребовать
_JAVA_OPTIONS
вместоJAVA_TOOL_OPTIONS
.эпилог
Существует несколько видов прокси . Соответственно, есть более чем один способ интерпретации этого вопроса, что приводит к большому количеству несопоставимых ответов здесь.
Я подробно рассмотрел случай веб-прокси-сервера (прямого HTTP / HTTPS) , который используется для доступа в Интернет из корпоративной сети (для некоторых компаний). Это может заметно отличаться от прокси-сервера SOCKS , который также был рассмотрен в некоторых ответах здесь.
Да, кстати, поскольку он использует
JAVA_TOOL_OPTIONS
, эти решения могут быть применены и для запуска других приложений Java внутри прокси .Напутственный совет ... Мой пример выше использует
http://localhost:58080
. Это потому, что я настроил переадресацию портов с моегоCLIENT_PROXY=localhost:58080
на настоящий сетевой прокси, используя WSL на моем клиенте удаленного доступа для запуска:источник