Я хочу поделиться своим опытом использования 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 для использования прокси-сервера?
Ответ 1
Эти причины наиболее вероятны по двум вопросам:
- Вам нужно добавить конфигурацию прокси в свой файл settings.xml. Вот трюк в вашем поле имени пользователя. Убедитесь, что он похож на домен\имя пользователя. Настройка домена там и установка этой точной косой черты важна. Возможно, вы захотите использовать <! [CDATA []] > тег, если ваш пароль содержит символы, не содержащие xml.
- Я заметил, что maven 2.2.0 не работает иногда через прокси-сервер вообще, где 2.2.1 работает отлично.
Если некоторые из них опущены - maven может выйти из строя со случайными сообщениями об ошибках.
Просто надеюсь, что я спас кого-то от поиска по этой проблеме в течение 6 часов, как и я.
Ответ 2
Подробнее о настройке прокси для 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>
Ответ 3
Как использовать прокси-сервер socks?
Настройте туннель SSH на сервер где-нибудь:
ssh -D $PORT $USER@$SERVER
Linux (bash):
export MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"
Окна:
set MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"
Ответ 4
У меня также была эта проблема, и я решил ее, отредактировав файл 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>
Ответ 5
Также обратите внимание, что некоторые плагины (удаленные ресурсы приходят на ум) используют действительно старую библиотеку, которая принимает только конфигурацию прокси-сервера через MAVEN_OPTS;
-Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port>
Вы можете застрять на auth для этого.
Ответ 6
Чтобы установить Maven Proxy:
Отредактируйте сеанс прокси в файле ~.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
Надеюсь, что это поможет...:)
Ответ 7
Просто добавьте свой собственный опыт: прокси-сервер моей компании 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
цели должна быть отколота от имени хоста, иначе она не будет работать.
Ответ 8
Спасибо @krosenvold.
Если изменения файла настроек не работают, попробуйте это в командной строке с файлом POM.
mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080
Это помогло мне сразу после смены пароля.
Ответ 9
И чтобы добавить к этой теме, вот мой опыт ниже... Действительно странно и много времени, поэтому я подумал, что стоит добавить.
У меня была аналогичная проблема с попыткой построить портлет-мост в 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:
[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
Я попробовал пару вещей, после небольшого серфинга:
-
Попробовал установить parent.relativePath как пустую, так что maven не думал, что родитель был локальным. Это по предложению SO на Hudson build fail: Неразрешимый родительский POM и в этот форум nabble. Это не имело никакого эффекта.
-
Я также попытался убедиться, что репозиторий явно указан в моих настройках .xml, но это тоже не имело никакого эффекта.
-
Затем я гарантировал, что mvn был вынужден искать репозиторий, а не полагаться на его собственную историю, как обсуждалось в в этом блоге Sarthon. К сожалению, это тоже не проблема.
-
В каком-то отчаянии я снова просмотрел свой MAVEN_OPTS, чтобы убедиться, что я не падаю на мои настройки прокси-сервера. Они были правильными, хотя со значением без кавычек:
set 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 не работал (кавычки?), в то время как config.xml config работал. Я хотел бы отменить решение и проверить каждый шаг снова, но потратил слишком много времени. Будет отчитываться как и когда.
Ответ 10
Я запускаю cntlm
localy, сконфигурированный с хэшами паролей NTLMv2
для аутентификации на корпоративном прокси, и использую
export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=3128"
использовать этот прокси от maven
. Конечно, используемый вами прокси должен поддерживать cntlm
/NTLMv2
.
Ответ 11
Я знаю, что на самом деле это не ответ на вопрос, но, возможно, стоит знать, кто-то ищет этот пост. Также возможно установить прокси-сервер репозитория Maven, например nexus.
Ваш maven будет настроен на контакт с локальным прокси Nexus, и Nexus затем будет извлекать (и кэшировать) артефакты. Его можно настроить через веб-интерфейс и поддерживать поддержку (http) прокси).
Это может быть преимуществом, особенно в настройках компании, поскольку артефакты локально доступны и могут быть быстро загружены, и вы больше не зависите от доступности внешних репозиториев Maven.
Чтобы вернуться к вопросу; с Nexus есть приятный графический интерфейс для настройки прокси-сервера, и это нужно делать только на одном месте, а не для каждого разработчика.
Ответ 12
Если maven работает через прокси-сервер, но не некоторые из подключаемых модулей, попробуйте установить JAVA_TOOL_OPTIONS
также с настройками -Dhttp*.proxy*
.
Если вы уже JAVA_OPTS
просто
export JAVA_TOOL_OPTIONS=$JAVA_OPTS
Ответ 13
За исключением техник, которые были упомянуты выше, с некоторыми усилиями вы можете запустить maven через прокси-сервер, используя библиотеку jproxyloader (на странице есть пример: http://jproxyloader.sourceforge.net/). Это позволяет настроить прокси-сервер socks только для загрузки артефактов.
В решении, упомянутом duanni (установка -DsocksProxyHost), есть одна проблема. Если у вас есть тесты интеграции с локальной базой данных (или другие тесты, связанные с URL-адресом, который не должен проходить через прокси-сервер). Эти тесты перестанут работать, потому что соединения с базой данных также будут направлены на прокси. С помощью jProxyLoader вы можете настроить прокси только для хоста nexus. Кроме того, если вы хотите, вы можете передавать соединения с базой данных через другой прокси.
Ответ 14
Вышеуказанные сообщения помогли решить мою проблему. В дополнение к вышесказанному мне пришлось внести следующие изменения, чтобы он работал:
-
Изменены сетевые настройки Maven JRE (\ jre\lib\net.properties) для использования настроек системного прокси.
https.proxyHost=proxy DNS
https.proxyPort=proxy port
-
Включены настройки прокси-сервера в settings.xml. Я не предоставил настройки имени пользователя и пароля, чтобы использовать аутентификацию NTLM.
Ответ 15
Иногда вам нужно добавить другие теги <proxy></proxy>
и указать https в тегах протокола: <protocol>https</protocol>
Ответ 16
если вы новичок в настройке прокси для Maven. В моем случае сначала зайдите и проверьте, есть .m2
папке " .m2
папка" папка .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
Надеюсь, это поможет!