Как использовать Maven через прокси-сервер?
Я хочу поделиться своим опытом использования Maven через прокси.
вы, скорее всего, столкнетесь с исключениями и сообщениями, такими как:
repository metadata for: 'org.apache.maven.plugins' could not be retrieved from
repository: central due to an error: Error transferring file: Connection refused: connect
или
[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-clean-
plugin:2.5: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its
dependencies could not be resolved: Failed to read artifact descriptor for
org.apache.maven.plugins:maven-clean-plugin:jar:2.5
Как настроить Maven для использования прокси-сервера?
15 ответов:
для получения дополнительной информации о настройке прокси для Maven см. мини-руководство.
по существу вам нужно обеспечить раздел прокси в любых глобальных настройках (
[maven install]/conf/settings.xml), или пользовательские настройки (${user.home}/.m2/settings.xml) правильно настроен. Лучше сделать это в настройках пользователя, чтобы избежать хранения пароля в виде обычного текста в общедоступном месте.Maven 2.1 представил шифрование пароля, но у меня нет времени, чтобы проверить, если шифрование применяется для настроек прокси-сервера, а также паролей репозитория (не понимаю, почему это не так).
для информации в настройках есть закомментированная конфигурация прокси-сервера.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 http://maven.apache.org/xsd/settings-1.0.0.xsd"> [...] <proxies> <proxy> <active>true</active> <protocol>http</protocol> <host>proxy.somewhere.com</host> <port>8080</port> <username>proxyuser</username> <password>somepassword</password> <nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts> </proxy> </proxies> [...] </settings>
как использовать прокси socks?
настройка SSH туннеля на сервер где-то:
ssh -D $PORT $USER@$SERVERLinux (bash):
export MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"Windows:
set MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"
У меня тоже была такая проблема и я решил ее путем редактирования настроек.XML-файл в моем .папка м2. Мои настройки.xml теперь выглядит так:
<settings> <proxies> <proxy> <id>genproxy</id> <active>true</active> <protocol>http</protocol> <host>proxyHost</host> <port>3128</port> <username>username</username> <password>password</password> </proxy> </proxies> </settings>
также обратите внимание, что некоторые плагины (remote-resources приходит на ум) используют действительно старую библиотеку, которая принимает конфигурацию прокси только через MAVEN_OPTS;
-Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port>вы можете застрять на auth для этого.
Они вызваны, скорее всего, 2 вопросами:
- вам нужно добавить настройки прокси в настройки.XML. Вот трюк в вашем поле имени пользователя. Убедитесь, что он выглядит как домен\имя пользователя. Установка домена там и размещение этой точной косой черты важно '\'. Вы можете использовать тег, если ваш пароль содержит не дружественные к xml символы.
- Я заметил, что maven 2.2.0 не работает иногда через прокси-сервер вообще, где 2.2.1 работает отлично штраф.
Если некоторые из них опущены-maven может потерпеть неудачу со случайными сообщениями об ошибках.
просто надеюсь, что я спас кого-то от Google вокруг этой проблемы в течение 6 часов, как я сделал.
просто чтобы добавить мой собственный опыт с этим: прокси моей компании
http://webproxy.intra.companyname.com:3128. Чтобы maven работал через этот прокси, настройки должны быть ровно такой<settings> <proxies> <proxy> <id>default</id> <active>true</active> <protocol>http</protocol> <host>webproxy.intra.companyname.com</host> <port>3128</port> </proxy> </proxies> </settings>В отличие от некоторых других файлов конфигурации прокси,
protocolздесь описывается, как подключиться к прокси-серверу, а не какие протокол должен быть прокси. Элементhttpчасть цели должна быть отделена от имени хоста, иначе она не будет работать.
установить Maven Proxy:
редактировать прокси сессии в вашем ~/.м2/настройки.xml-файл. Если вы не можете найти файл, создать.
<settings> <proxies> <proxy> <id>httpproxy</id> <active>true</active> <protocol>http</protocol> <host>your-proxy-host</host> <port>your-proxy-port</port> <nonProxyHosts>local.net|some.host.com</nonProxyHosts> </proxy> <proxy> <id>httpsproxy</id> <active>true</active> <protocol>https</protocol> <host>your-proxy-host</host> <port>your-proxy-port</port> <nonProxyHosts>local.net|some.host.com</nonProxyHosts> </proxy> </proxies> </settings>или
редактировать прокси сессии в вашем {M2_HOME}/conf / settings.xml
надеюсь, что это помогает.. :)
и чтобы добавить к этой теме, вот мой опыт ниже... Действительно странно и отнимает много времени, поэтому я подумал, что это стоит добавить.
у меня была аналогичная проблема, пытаясь построить портлет-мост на Windows, получая следующие ошибки:
Downloading: http://repo1.maven.org/maven2/org/apache/portals/bridges-pom/1.0/bridges-pom-1.0.pom [DEBUG] Reading resolution tracking file C:\Documents and Settings\myuser\.m2\repository\org\apache\portals\bridges-pom.0\bridges-pom-1.0.pom.lastUpdated [DEBUG] Writing resolution tracking file C:\Documents and Settings\myuser\.m2\repository\org\apache\portals\bridges-pom.0\bridges-pom-1.0.pom.lastUpdated [ERROR] The build could not read 1 project -> [Help 1] org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs: [FATAL] Non-resolvable parent POM: Could not transfer artifact org.apache.portals:bridges-pom:pom:1.0 from/to central (http://repo1.maven.org/maven2): Error transferring file: repo1.maven.org and 'parent.relativePath' points at wrong local POM @ line 23, column 11 ... [ERROR] The project org.apache.portals.bridges:portals-bridges-common:2.0 (H:\path_to_project\portals-bridges-common-2.0\pom.xml) has 1 error [ERROR] Non-resolvable parent POM: Could not transfer artifact org.apache.portals:bridges-pom:pom:1.0 from/to central (http://repo1.maven.org/maven2): Error transferring file: repo1.maven.org and 'parent.relativePath' points at wrong local POM @ line 23, column 11: Unknown host repo1.maven.org -> [Help 2] ... [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException [ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelExceptionя попробовал пару вещей, после немного серфинга:
пытался установить родителя.relativePath как пустой, так что maven не думал, что родитель был местным. Это в соответствии с предложением о Так что на Хадсон построить не удастся: не разлагающийся родитель пом и в этом nabble форума. Это не возымело никакого эффекта.
Я также попытался убедиться, что репозиторий был явно указан в моих настройках.но и это не возымело никакого эффекта.
затем я гарантировал, что mvn был вынужден искать репозиторий, а не полагаться на его собственную историю, как описано в этот блог от Sarthon. К сожалению, это не было проблемой любой.
в некотором отчаянии я затем пересмотрел свои MAVEN_OPTS, чтобы убедиться, что я не нарушаю настройки прокси-сервера. Они были правильными, хотя и со значением без кавычек:
set MAVEN_OPTS= -Dhttp.proxyHost=myproxy.mycompany.com -Dhttp.proxyPort=8080 -Xmx256m
Итак, наконец, я переместил конфигурацию прокси в Мои настройки.XML и это сработало:
<proxies> <proxy> <id>genproxy</id> <active>true</active> <protocol>http</protocol> <!--username>proxyuser</username--> <!--password>proxypass</password--> <host>myproxy.mycompany.com</host> <port>8080</port> <nonProxyHosts>*.mycompany.com|127.0.0.1</nonProxyHosts> </proxy> </proxies>правда не уверен почему мой оригинальный MAVEN_OPTS не работал (цитаты?) пока настройки.в xml файле не работал. Я хотел бы отменить исправление и проверить каждый шаг снова, но потратил слишком много времени. Будет отчитываться, как и когда.
Я знаю, что это не совсем ответ на вопрос, но это может быть стоит знать для кого-то, кто ищет этот пост. Также можно установить прокси репозитория Maven, например Нексус.
ваш maven будет настроен на контакт с локальным прокси-сервером Nexus, и Nexus затем получит (и кэширует) артефакты. Он может быть настроен через веб-интерфейс и имеет поддержку (http) прокси).
Это может быть преимуществом, особенно в компании настройка, поскольку артефакты доступны локально и могут быть загружены быстро, и вы больше не зависите от доступности внешних репозиториев Maven.
чтобы вернуться к вопросу; с Nexus есть хороший графический интерфейс для конфигурации прокси, и это должно быть сделано только в одном месте, а не для каждого разработчика.
спасибо @krosenvold.
если изменения файла настроек не работают, попробуйте это в командной строке с файлом POM.
mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080это помогло мне сразу после смены пароля.
если maven работает через прокси, но не некоторые из плагинов, которые он вызывает, попробуйте установить
JAVA_TOOL_OPTIONSС-Dhttp*.proxy*настройки.если вы уже
JAVA_OPTSпросто делатьexport JAVA_TOOL_OPTIONS=$JAVA_OPTS
Я бегу
cntlmлокально, настроен сNTLMv2хэши паролей для аутентификации с помощью корпоративного прокси и использованияexport MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=3128"чтобы использовать этот прокси от
maven. Конечно, прокси-сервер, который вы используете, должен поддерживатьcntlm/NTLMv2.
за исключением методов, упомянутых выше, с некоторыми усилиями вы можете запустить maven через прокси с помощью библиотеки jproxyloader (на странице есть пример, как это сделать:http://jproxyloader.sourceforge.net/). это позволяет настроить SOCKS прокси только для загрузки артефактов.
в решении, упомянутом duanni (setting-DsocksProxyHost), есть одна проблема. Если у вас есть интеграционные тесты, работающие с локальной базой данных (или другие тесты, подключающиеся к url, которые не должны перейти через прокси). Эти тесты перестанут работать, потому что соединения с базой данных также будут направлены на прокси. С помощью jProxyLoader вы можете настроить прокси-сервер только для Nexus хозяина. Кроме того, если вы хотите, вы можете передавать соединения с базой данных через другой прокси-сервер.
вышеуказанные сообщения помогли в решении моей проблемы. В дополнение к вышесказанному мне пришлось внести следующие изменения, чтобы заставить его работать:
изменены настройки сети JRE Maven (\jre\lib\net.свойства) для использования настройки прокси-сервера системы. протокол https.proxyHost= прокси DNS протокол https.proxyPort=proxy port
- включить настройки прокси-сервера в настройках.XML. Я не предоставил настройки имени пользователя и пароля для использования аутентификации NTLM.
несколько раз нужно добавить
<proxy></proxy>теги, и укажите https в тегах протокола:<protocol>https</protocol>
Comments