Como é que uso o Maven através de um proxy?
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'?
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>
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"
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>
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.
Estes são causados muito provavelmente por 2 números:
- 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. 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.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.
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.. :)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/UnresolvableModelExceptionEu 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.
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.
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.
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
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
.
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.
-
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.
Algumas vezes você precisa adicionar outras marcas <proxy></proxy>
, e indicar os https nas marcas do protocolo: <protocol>https</protocol>