Как мне использовать 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 на использование прокси-сервера?
Решение 6
Они вызваны, скорее всего, двумя проблемами:
- Вам необходимо добавить конфигурацию прокси-сервера в свой settings.xml .Вот хитрость в поле вашего имени пользователя.Убедитесь, что это выглядит как domain\username .Важно установить домен там и поставить именно эту косую черту '\'.Возможно, вы захотите использовать <![CDATA[]]> tag, если ваш пароль содержит символы, не подходящие для xml.
- Я заметил, что maven 2.2.0 иногда вообще не работает через прокси, тогда как 2.2.1 работает отлично.
Если некоторые из них опущены - maven может завершиться сбоем со случайными сообщениями об ошибках.
Просто надеюсь, что я избавил кого-нибудь от необходимости гуглить эту проблему в течение 6 часов, как это сделал я.
Другие советы
Дополнительные сведения о настройке прокси-сервера для Maven см. в мини-путеводитель.
По сути, вам нужно убедиться, что раздел прокси находится либо в глобальных настройках ([maven install]/conf/settings.xml
), или пользовательские настройки (${user.home}/.m2/settings.xml
) настроен правильно.Лучше сделать это в настройках вашего пользователя, чтобы избежать хранения пароля в виде обычного текста в общедоступном месте.
Представлен Maven 2.1 шифрование пароля, но я не удосужился проверить, применяется ли шифрование к настройкам прокси-сервера, а также к паролям репозитория (хотя не понимаю, почему бы и нет).
Для получения дополнительной информации в вашем файле есть прокомментированная конфигурация прокси-сервера 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
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@$SERVER
Linux (bash):
export MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"
Windows:
set MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"
Также обратите внимание, что некоторые плагины (на ум приходят remote-resources) используют действительно старую библиотеку, которая принимает конфигурацию прокси только через MAVEN_OPTS;
-Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port>
Возможно, вы застряли на auth для этого.
У меня тоже была эта проблема, и я решил ее, отредактировав файл settings.xml в моей папке .m2.Мой settings.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>
Чтобы установить Прокси - сервер Maven :
Отредактируйте сеанс прокси-серверов в вашем ~/.m2/settings.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
Надеюсь, это поможет..:)
Просто чтобы добавить свой собственный опыт работы с этим:доверенное лицо моей компании - это 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
часть целевого объекта должна быть отделена от имени хоста, иначе это не сработает.
Спасибо @krosenvold.
Если изменения в файле настроек не работают, попробуйте выполнить это в командной строке, имеющей POM-файл.
mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080
Это помогло мне сразу после смены пароля.
Я бегу cntlm
локально, сконфигурированный с NTLMv2
хэши паролей для аутентификации с помощью корпоративного прокси-сервера и использования
export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=3128"
чтобы использовать этот прокси-сервер из maven
.Конечно, прокси-сервер, который вы используете, должен поддерживать cntlm
/NTLMv2
.
И в дополнение к этой теме, ниже приведен мой опыт...Действительно странно и отнимает много времени, поэтому я подумал, что это стоит добавить.
У меня была аналогичная проблема при попытке создать portlet-bridge в 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\1.0\bridges-pom-1.0.pom.lastUpdated [DEBUG] Writing resolution tracking file C:\Documents and Settings\myuser\.m2\repository\org\apache\portals\bridges-pom\1.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: [ФАТАЛЬНЫЙ] Неразрешимый родительский POM:Не удалось перенести артефакт org.apache.portals:bridges-pom:pom:1.0 из / в central (http://repo1.maven.org/maven2):Ошибка при передаче файла:repo1.maven.org и 'parent.relativePath' указывает на неправильный локальный POM @ строка 23, столбец 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): Ошибка при передаче файла:repo1.maven.org и 'parent.relativePath' указывает на неправильный локальный POM @ строка 23, столбец 11:Неизвестный хост repo1.maven.org -> [Справка 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
Я попробовал пару вещей, после небольшого серфинга:
Попытался установить parent.relativePath как пустой, чтобы maven не думал, что родительский файл был локальным.Это в соответствии с предложением на SO at Сбой сборки в Хадсоне:Неразрешимый родительский POM и на этом форуме nabble.Это не возымело никакого эффекта.
Я также попытался убедиться, что репозиторий явно указан в моем settings.xml но это тоже не возымело никакого эффекта.
Затем я позаботился о том, чтобы mvn был вынужден выполнять поиск в репозитории, а не полагаться на его собственную историю, как обсуждалось в этот блог Сартона.К сожалению, проблема была не в этом.
В некотором отчаянии я затем пересмотрел свой MAVEN_OPTS, чтобы убедиться, что я не нарушаю настройки своего прокси.Они были правильными, хотя и со значением без кавычек:
установить MAVEN_OPTS= -Dhttp.proxyHost=myproxy.mycompany.com -Dhttp.proxyPort=8080 -Xmx256m
Итак, наконец, я перенес конфигурацию прокси в свой settings.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 не работал (кавычки?) в то время как settings.xml конфигурация действительно работала.Я бы хотел отменить исправление и еще раз проверить каждый шаг, но потратил слишком много времени впустую.Сообщу, как и когда.
Я знаю, что на самом деле это не ответ на вопрос, но, возможно, это стоит знать тому, кто ищет этот пост.Также возможно установить прокси-сервер репозитория Maven, например нексус.
Ваш maven был бы настроен на контакт с локальным прокси-сервером Nexus, и затем Nexus извлек бы (и кэшировал) артефакты.Он может быть настроен через веб-интерфейс и имеет поддержку прокси-серверов (http)).
Это может быть преимуществом, особенно в условиях компании, поскольку артефакты доступны локально и могут быть быстро загружены, и вы больше не так сильно зависите от доступности внешних репозиториев Maven.
Чтобы вернуться к ссылке на вопрос;в Nexus есть хороший графический интерфейс для настройки прокси, и это нужно делать только в одном месте, и не для каждого разработчика.
Если maven работает через прокси, но не через некоторые из вызываемых им плагинов, попробуйте установить JAVA_TOOL_OPTIONS
а также с -Dhttp*.proxy*
Настройки.
Если у вас уже есть JAVA_OPTS
просто делай
export JAVA_TOOL_OPTIONS=$JAVA_OPTS
если вы новичок в настройке прокси для Maven В моем случае, сначала зайдите и проверьте, есть ли в вашей домашней папке погода .m2
папка и в ней должен быть файл с именем settings.xml
если нет , создайте его , вставьте это и измените host
и port
, затем при необходимости измените nonProxyHosts
Домашняя папка - C:\Users \ {Имя пользователя}
<settings>
<proxies>
<proxy>
<id>httpproxy</id>
<active>true</active>
<protocol>http</protocol>
<host>your-proxy-host</host>
<port>your-proxy-port</port>
<nonProxyHosts>localhost</nonProxyHosts>
</proxy>
<proxy>
<id>httpsproxy</id>
<active>true</active>
<protocol>https</protocol>
<host>your-proxy-host</host>
<port>your-proxy-port</port>
<nonProxyHosts>localhost</nonProxyHosts>
</proxy>
</proxies>
</settings>
Если в любом случае это не увенчается успехом, перейдите и внесите изменения в это расположение домашней папки
/conf/settings.xml
Я использую Eclipse в качестве своей IDE
Надеюсь , это поможет !!
За исключением методов, упомянутых выше, приложив некоторые усилия, вы можете запустить maven через прокси, используя библиотеку jproxyloader (на странице есть пример, как это сделать: http://jproxyloader.sourceforge.net/).Это позволяет настроить socks proxy только для загрузки артефактов.
В решении, упомянутом duanni (настройка -DsocksProxyHost), есть одна проблема.Если у вас есть интеграционные тесты, запущенные с локальной базой данных (или другие тесты, подключающиеся к URL, которые не должны проходить через прокси).Эти тесты перестанут работать, потому что подключения к базе данных также будут перенаправлены на прокси.С помощью jProxyLoader вы можете настроить прокси только для nexus host.Кроме того, если вы хотите, вы можете передавать подключения к базе данных через другой прокси.
Иногда вам нужно добавить другие <proxy></proxy>
теги, и укажите https в тегах протокола: <protocol>https</protocol>
Приведенные выше публикации помогли в решении моей проблемы.В дополнение к вышесказанному мне пришлось внести следующие изменения, чтобы заставить его работать :
Изменил настройки сети JRE в Maven (\jre\lib et.properties), чтобы использовать настройки системного прокси.
https.proxyHost=proxy DNS https.proxyPort=proxy port
Включены настройки прокси-сервера в settings.xml .Я не предоставил настройки имени пользователя и пароля для использования аутентификации NTLM.