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

1535   15  

15 ответов:

для получения дополнительной информации о настройке прокси для Maven см. мини-руководство.

по существу вам нужно обеспечить раздел прокси в любых глобальных настройках ([maven install]/conf/settings.xml), или пользовательские настройки (${user.home}/.m2/settings.xml) правильно настроен. Лучше сделать это в настройках пользователя, чтобы избежать хранения пароля в виде обычного текста в общедоступном месте.

Maven 2.1 представил шифрование пароля, но у меня нет времени, чтобы проверить, если шифрование применяется для настроек прокси-сервера, а также паролей репозитория (не понимаю, почему это не так).

для информации в настройках есть закомментированная конфигурация прокси-сервера.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"

У меня тоже была такая проблема и я решил ее путем редактирования настроек.XML-файл в моем .папка м2. Мои настройки.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>

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

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

вы можете застрять на auth для этого.

Они вызваны, скорее всего, 2 вопросами:

  1. вам нужно добавить настройки прокси в настройки.XML. Вот трюк в вашем поле имени пользователя. Убедитесь, что он выглядит как домен\имя пользователя. Установка домена там и размещение этой точной косой черты важно '\'. Вы можете использовать тег, если ваш пароль содержит не дружественные к xml символы.
  2. Я заметил, что maven 2.2.0 не работает иногда через прокси-сервер вообще, где 2.2.1 работает отлично штраф.

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

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

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

установить Maven Proxy:

редактировать прокси сессии в вашем ~/.м2/настройки.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

надеюсь, что это помогает.. :)

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

у меня была аналогичная проблема, пытаясь построить портлет-мост на 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.0\bridges-pom-1.0.pom.lastUpdated
[DEBUG] Writing resolution tracking file C:\Documents and Settings\myuser\.m2\repository\org\apache\portals\bridges-pom.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

я попробовал пару вещей, после немного серфинга:

  • пытался установить родителя.relativePath как пустой, так что maven не думал, что родитель был местным. Это в соответствии с предложением о Так что на Хадсон построить не удастся: не разлагающийся родитель пом и в этом nabble форума. Это не возымело никакого эффекта.

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

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

  • в некотором отчаянии я затем пересмотрел свои MAVEN_OPTS, чтобы убедиться, что я не нарушаю настройки прокси-сервера. Они были правильными, хотя и со значением без кавычек:

    set MAVEN_OPTS= -Dhttp.proxyHost=myproxy.mycompany.com -Dhttp.proxyPort=8080 -Xmx256m

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

Я знаю, что это не совсем ответ на вопрос, но это может быть стоит знать для кого-то, кто ищет этот пост. Также можно установить прокси репозитория Maven, например Нексус.

ваш maven будет настроен на контакт с локальным прокси-сервером Nexus, и Nexus затем получит (и кэширует) артефакты. Он может быть настроен через веб-интерфейс и имеет поддержку (http) прокси).

Это может быть преимуществом, особенно в компании настройка, поскольку артефакты доступны локально и могут быть загружены быстро, и вы больше не зависите от доступности внешних репозиториев Maven.

чтобы вернуться к вопросу; с Nexus есть хороший графический интерфейс для конфигурации прокси, и это должно быть сделано только в одном месте, а не для каждого разработчика.

спасибо @krosenvold.

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

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

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

если maven работает через прокси, но не некоторые из плагинов, которые он вызывает, попробуйте установить JAVA_TOOL_OPTIONS С -Dhttp*.proxy* настройки.

если вы уже JAVA_OPTS просто делать

export JAVA_TOOL_OPTIONS=$JAVA_OPTS

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

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

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

за исключением методов, упомянутых выше, с некоторыми усилиями вы можете запустить maven через прокси с помощью библиотеки jproxyloader (на странице есть пример, как это сделать:http://jproxyloader.sourceforge.net/). это позволяет настроить SOCKS прокси только для загрузки артефактов.

в решении, упомянутом duanni (setting-DsocksProxyHost), есть одна проблема. Если у вас есть интеграционные тесты, работающие с локальной базой данных (или другие тесты, подключающиеся к url, которые не должны перейти через прокси). Эти тесты перестанут работать, потому что соединения с базой данных также будут направлены на прокси. С помощью jProxyLoader вы можете настроить прокси-сервер только для Nexus хозяина. Кроме того, если вы хотите, вы можете передавать соединения с базой данных через другой прокси-сервер.

вышеуказанные сообщения помогли в решении моей проблемы. В дополнение к вышесказанному мне пришлось внести следующие изменения, чтобы заставить его работать:

  • изменены настройки сети JRE Maven (\jre\lib\net.свойства) для использования настройки прокси-сервера системы. протокол https.proxyHost= прокси DNS протокол https.proxyPort=proxy port

    • включить настройки прокси-сервера в настройках.XML. Я не предоставил настройки имени пользователя и пароля для использования аутентификации NTLM.

несколько раз нужно добавить <proxy></proxy> теги, и укажите https в тегах протокола:<protocol>https</protocol>

Comments

    Ничего не найдено.