Как мне использовать Maven через прокси?

StackOverflow https://stackoverflow.com/questions/1251192

  •  12-09-2019
  •  | 
  •  

Вопрос

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top