Как я могу использовать Maven через прокси? - PullRequest
110 голосов
/ 09 августа 2009

Хочу поделиться своим опытом использования 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 ]

134 голосов
/ 09 августа 2009

Подробнее о настройке прокси для 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>
40 голосов
/ 28 марта 2011

Как использовать прокси-носки?

Настройка 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"
23 голосов
/ 30 августа 2013

Также обратите внимание, что некоторые плагины (на ум приходят удаленные ресурсы) используют действительно старую библиотеку, которая принимает конфигурацию прокси только через MAVEN_OPTS;

-Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port>

Возможно, вы застряли на этой аутентификации.

23 голосов
/ 19 декабря 2012

У меня тоже была эта проблема, и я решил ее, отредактировав файл 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>
19 голосов
/ 08 мая 2017

Для установки 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

Надеюсь, это поможет ..:)

14 голосов
/ 13 декабря 2015

Просто добавьте мой собственный опыт: прокси моей компании - 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 часть цели должна быть отделена от имени хоста, иначе она не будет работать.

13 голосов
/ 09 августа 2009

Это вызвано, скорее всего, двумя проблемами:

  1. Вам необходимо добавить конфигурацию прокси в файл settings.xml. Вот хитрость в вашем поле имени пользователя. Убедитесь, что это выглядит как домен \ имя пользователя. Установка домена и размещение точного слеша очень важны '\'. Возможно, вы захотите использовать тег <! [CDATA []]>, если ваш пароль содержит символы, не поддерживающие xml.
  2. Я заметил, что maven 2.2.0 иногда вообще не работает через прокси, где 2.2.1 работает отлично.

Если некоторые из них пропущены - maven может завершиться ошибкой со случайными сообщениями об ошибках.

Просто надеюсь, что я спас кого-то от поисков по этой проблеме в течение 6 часов, как я сделал.

9 голосов
/ 12 января 2018

Спасибо @ krosenvold.

Если изменения файла настроек не работают, попробуйте это в командной строке с файлом POM.

mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080

Это помогло мне сразу после смены пароля.

6 голосов
/ 19 октября 2011

И чтобы добавить к этой теме, вот мой опыт ниже ... Действительно странный и трудоемкий, поэтому я подумал, что это стоит добавить.

У меня была похожая проблема при попытке построить портлет-мост в 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:
<strong>[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</strong>
...
[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):
<strong>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]</strong>
...
[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: неразрешимые родительские POM и на этом форуме nabble . Это не имело никакого эффекта.

  • Я также пытался убедиться, что хранилище было явно указано в моем файле settings.xml, но это также не имело никакого эффекта.

  • Затем я убедился, что mvn был вынужден искать репозиторий, а не полагаться на свою собственную историю, как обсуждалось в этом блоге Сартоном . К сожалению, это тоже не проблема.

  • В каком-то отчаянии я снова посетил свой 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 не работал (кавычки?), В то время как конфиг settings.xml работал. Я хотел бы отменить исправление и проверить каждый шаг снова, но потратил слишком много времени. Отчитается как и когда.

5 голосов
/ 29 июня 2018

Я запускаю cntlm локально, настроенный с помощью NTLMv2 хэшей паролей для аутентификации на корпоративном прокси и использования

export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=3128"

для использования этого прокси от maven. Конечно, используемый вами прокси должен поддерживать cntlm / NTLMv2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...