Como é que uso o Maven através de um proxy?

Quero partilhar a minha experiência de usar o maven por procuração.

provavelmente enfrentaria excepções e mensagens como:

repository metadata for: 'org.apache.maven.plugins' could not be retrieved from 
repository: central due to an error: Error transferring file: Connection refused: connect

ou

[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

Como configurar o Maven para usar o servidor 'proxy'?

 93
Author: Duncan Jones, 2009-08-09

15 answers

Para mais pormenores sobre a criação de um 'proxy' para o Maven, ver o mini-guia .

Basicamente, você precisa de assegurar que a secção proxies quer na configuração global ([maven install]/conf/settings.xml), quer na configuração do Utilizador (${user.home}/.m2/settings.xml) esteja configurada correctamente. É melhor fazer isso em suas configurações de usuário para evitar armazenar a senha em texto simples em um local público.

O Maven 2. 1 introduziu a encriptação por senha , mas não tenho de verificar se a encriptação se aplica à configuração do 'proxy' assim como senhas do repositório (não vejo por que não iria embora).

Para informação, existe uma configuração 'proxy' comentada na sua configuração.xml e instruções sobre como modificá-lo.

A partir do mini-guia, a sua configuração deve ser parecida com esta:

<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>
 118
Author: Rich Seller, 2015-05-12 04:16:01

Como usar um proxy de meias?

Montem um túnel SSH para um servidor algures.
ssh -D $PORT $USER@$SERVER

Linux (bash):

export MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"

Janelas:

set MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"
 37
Author: gs1, 2012-04-20 13:11:22

Também tive este problema, e resolvi-o editando as configurações.ficheiro xml no meu .pasta m2. As minhas configurações.xml é assim agora:

<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
Author: pedrobisp, 2012-12-19 18:35:08

Lembre-se também que alguns 'plugins' (recursos remotos vêm à mente) usam uma biblioteca realmente antiga que só aceita a configuração do 'proxy' através do MAVEN_ OPTS;

-Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port>
Podes estar preso no auth por causa disto.
 13
Author: krosenvold, 2013-08-30 08:13:02

Estes são causados muito provavelmente por 2 números:

  1. Tem de adicionar a configuração do 'proxy' à sua configuração.xml. Aqui está um truque no seu campo de username. Certifique-se que se parece com o domínio\username. Definir o domínio lá e colocar esta barra exacta é importante '\'. Você pode querer usar marca se a sua senha contiver caracteres não amigáveis ao xml.
  2. Já reparei que o maven 2.2.0 não funciona, por vezes, através de um proxy, onde o 2.2.1 funciona perfeitamente. fino.

Se algumas delas forem omitidas-o maven pode falhar com mensagens de erro aleatórias.

Só espero ter salvo alguém de procurar no Google durante 6 horas, como fiz.
 11
Author: Bogdan, 2009-08-09 11:59:45

Só para adicionar as minhas próprias experiências com isto: o representante da minha empresa é http://webproxy.intra.companyname.com:3128. Para o maven trabalhar através deste 'proxy', a configuração tem de ser exactamente como este

<settings>
  <proxies>
    <proxy>
      <id>default</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>webproxy.intra.companyname.com</host>
      <port>3128</port>
    </proxy>
  </proxies>
</settings>

Ao contrário de outros ficheiros de configuração do 'proxy', o protocol aqui descreve como se ligar ao servidor 'proxy', não Quais os tipos de protocolo que devem ser apresentados. A parte http do alvo tem de ser separada do nome da máquina, caso contrário não irá funcionar.

 11
Author: Andy Jones, 2016-03-15 09:25:03

Para definir Maven Proxy :

Edite a sessão de proxies na sua ~/.m2 / configuração.ficheiro xml . Se não conseguir encontrar o ficheiro, crie um.

<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>

Ou

Edite a sessão de proxies na sua {M2_HOME} / conf / configuração.xml

Espero que ajude.. :)
 10
Author: Sarat Chandra, 2017-05-08 04:37:27
E para acrescentar a este tópico, aqui estão as minhas experiências abaixo... Muito estranho e demorado, por isso achei que valia a pena adicionar. Tive um problema semelhante ao tentar construir a ponte portlet-bridge nas janelas, obtendo os seguintes erros:
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
Eu tentei algumas coisas, depois de um pouco de surf.
  • Tentei definir o pai."relativePath" como vazio para que maven não pensasse que o pai era local. Isto é como a sugestão de SO na Hudson build falha: POM-pai não resolúvel e neste fórum nabble . Isto não teve efeito.

  • Eu também tentei garantir que o repositório estava explicitamente listado em minhas configurações.xml mas isto também não teve efeito.

  • Eu, então, assegurada mvn foi forçado a procurar o repositório, em vez de confiar em sua própria história, como discutido em este blog por Sarthon. Infelizmente, esta também não era a questão.

  • Em algum desespero, então revisitei os meus métodos para garantir que não estava a falhar as minhas definições de proxy. Estes eram corretos, embora com o valor não cotado:

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

  • Então, finalmente, movi a configuração do proxy para as minhas configurações.xml e isto funcionou:

    <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>

Realmente não sei porque é que os meus MAVEN_OPTS originais não estavam a funcionar (citações?) enquanto as configurações.a configuração xml funcionou. Eu gostaria de reverter a correção e verificar cada passo novamente, mas ter perdido muito tempo. Responderemos quando e quando.

 6
Author: wmorrison365, 2017-05-23 10:31:16

Eu sei que isto não é realmente uma resposta para a pergunta, mas pode valer a pena saber para alguém que procura este post. Também é possível instalar um proxy de repositório Maven como nexus .

O seu maven estaria configurado para contactar o proxy local Nexus, e o Nexus iria então recuperar (e cache) os artefactos. Ele pode ser configurado através de uma interface web e tem suporte para proxies (http).

Isto pode ser uma vantagem, especialmente num ambiente de empresa, pois os artefatos estão disponíveis localmente e podem ser baixados rapidamente, e você não está mais dependente da disponibilidade de repositórios de Maven externos.

Para ligar de volta à pergunta; com o Nexus existe uma boa interface gráfica para a configuração do 'proxy', e ela precisa ser feita apenas em um lugar, e não para cada desenvolvedor.

 4
Author: extraneon, 2009-08-09 12:16:23
Obrigado @krosenvold.

Se as alterações do ficheiro de configuração não funcionarem, tente isto na linha de comandos com o ficheiro POM.

mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080
Isto ajudou-me imediatamente após uma mudança de senha.
 4
Author: user1189363, 2018-04-27 16:50:41

Se o maven funcionar através do 'proxy', mas não alguns dos 'plugins' que está a invocar, tente definir JAVA_TOOL_OPTIONS assim como -Dhttp*.proxy*.

Se já tiver JAVA_OPTS Faça

export JAVA_TOOL_OPTIONS=$JAVA_OPTS
 1
Author: auselen, 2016-09-02 11:25:38

Eu corro cntlm localy, configurado com NTLMv2 senhas para autenticar com o 'proxy' corporativo, e uso

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

Para usar esse proxy de maven. Claro que o proxy que você usa deve suportar cntlm/NTLMv2.

 1
Author: Peter Hofman, 2018-06-29 09:39:06

Excepto para as técnicas acima mencionadas, com algum esforço, você pode executar maven através de proxy usando a biblioteca jproxylader (há um exemplo na página como fazer isto: http://jproxyloader.sourceforge.net/). Isto permite configurar o 'proxy' do socks apenas para obter artefactos.

Na solução mencionada por duanni (setting-DsocksProxyHost) há um problema. Se tiver testes de integração a correr com base de dados local (ou outros testes a ligar-se ao url que não deverá passar procuracao). Estes testes vão parar de funcionar porque as conexões para o banco de dados também serão direcionadas para proxy. Com a ajuda do jProxyLoader você pode configurar o proxy apenas para o nexus host. Além disso, se você quiser, você pode passar conexões à base de dados através de outro proxy.

 0
Author: walkeros, 2014-08-02 04:57:53
As mensagens acima ajudaram a resolver o meu problema. Para além do acima exposto, tive de fazer as seguintes alterações para que funcionasse:
  • A configuração JRE net do Maven modificada(\jre\lib\net.propriedades) para usar a configuração do 'proxy' do sistema. https.proxyHost= proxy DNS https.proxyPort=proxy port

    • incluiu a configuração do servidor 'proxy' na configuração.xml. Não forneci o nome de utilizador e a configuração da senha para usar a autenticação NTLM.
 0
Author: siachen345, 2015-07-01 19:50:36

Algumas vezes você precisa adicionar outras marcas <proxy></proxy>, e indicar os https nas marcas do protocolo: <protocol>https</protocol>

 0
Author: Pepe, 2018-09-17 19:40:34