Как использовать 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 для использования прокси-сервера?

Ответ 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>

Ответ 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
Надеюсь, это поможет!