Quero compartilhar minha experiência de usar o maven por meio de um proxy.
Você provavelmente enfrentaria exceções e mensagens como:
os metadados do repositório para: 'org.apache.maven.plugins' não puderam ser recuperados de repositório: central devido a um erro: Erro ao transferir arquivo: Conexão recusada: conectar
ou
[AVISO] Falha ao recuperar o descritor de plug-in para org.apache.maven.plugins: maven-clean- plugin: 2.5: Plugin org.apache.maven.plugins: maven-clean-plugin: 2.5 ou um de seus dependências não puderam ser resolvidas: falha ao ler o descritor de artefato para org.apache.maven.plugins: maven-clean-plugin: jar: 2.5
Como configurar o Maven para usar o servidor proxy?
Respostas:
Para detalhes sobre como configurar um proxy para o Maven, consulte o mini guia .
Essencialmente, você precisa garantir que a seção proxies nas configurações globais (
[maven install]/conf/settings.xml
) ou nas configurações do usuário (${user.home}/.m2/settings.xml
) esteja configurada corretamente. É melhor fazer isso nas configurações do usuário para evitar o armazenamento da senha em texto sem formatação em um local público.O Maven 2.1 introduziu a criptografia de senha , mas não cheguei a verificar se a criptografia se aplica às configurações de proxy e às senhas do repositório (não veja por que não seria).
Para obter informações, há uma configuração de proxy comentada em seu settings.xml e instruções sobre como modificá-la.
No mini-guia, suas configurações devem ser algo assim:
fonte
<username>
e<password>
devem ser removidos (e não receber conteúdo vazio). Demorei um pouco para descobrir.Como usar um proxy de meias?
Configure um túnel SSH para um servidor em algum lugar:
Linux (bash):
Janelas:
fonte
MAVEN_OPTS
é a única maneira de fazer o Maven fazer o download por HTTPS. O uso de proxies HTTP ou HTTPS, por meioMAVEN_OPTS
ousettings.xml
resulta emorg.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec execute INFO: I/O exception (java.net.SocketException) caught when processing request to {tls}->http://proxy.mycompany.com:911->https://repo.maven.apache.org:443: SOCKS: TTL expired
http
proxy:export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=$PORT"
MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080" mvn clean install
Os próximosmvn
comandos na mesma sessão serão sem proxy.Eu também tive esse problema e resolvi-o editando o
settings.xml
arquivo na minha.m2
pasta. Meusettings.xml
é assim agora:fonte
Observe também que alguns plug-ins (recursos remotos vêm à mente) usam uma biblioteca muito antiga que aceita apenas configurações de proxy através do MAVEN_OPTS;
Você pode estar preso na autenticação para este.
fonte
Para definir o Maven Proxy :
Edite a sessão de proxies no seu arquivo ~ / .m2 / settings.xml . Se você não conseguir encontrar o arquivo, crie um.
ou
Edite a sessão de proxies em seu {M2_HOME} /conf/settings.xml
Espero que ajude.. :)
fonte
Isso é causado provavelmente por 2 problemas:
Se alguns deles forem omitidos - o maven poderá falhar com mensagens de erro aleatórias.
Espero que eu tenha salvado alguém de pesquisar no Google por 6 horas, como eu fiz.
fonte
Só para adicionar minhas próprias experiências com isso: o proxy da minha empresa é
http://webproxy.intra.companyname.com:3128
. Para que o maven funcione através desse proxy, as configurações devem ser exatamente assimDiferentemente de outros arquivos de configuração de proxy, o
protocol
aqui descreve como conectar-se ao servidor proxy, e não quais tipos de protocolo devem ser proxy. Ahttp
parte do destino deve ser separada do nome do host, caso contrário não funcionará.fonte
Obrigado @krosenvold.
Se as alterações no arquivo de configurações não funcionarem, tente isso no prompt de comando com o arquivo POM.
Isso me ajudou imediatamente após uma alteração de senha.
fonte
Eu corro
cntlm
localmente, configurado comNTLMv2
hashes de senha para autenticar com o proxy corporativo e usopara usar esse proxy de
maven
. Claro que o proxy que você usa deve suportarcntlm
/NTLMv2
.fonte
[Environment]::SetEnvironmentVariable("MAVEN_OPTS", "-DproxyHost=127.0.0.1 -DproxyPort=3128", "Machine")
E para adicionar a este tópico, aqui estão minhas experiências abaixo ... Realmente estranhas e demoradas, então pensei que valeria a pena adicionar.
Eu tive um problema semelhante ao tentar criar a ponte de portlet no Windows, obtendo os seguintes erros:
Eu tentei algumas coisas, seguindo um pouco de surf:
Tentou definir o parent.relativePath como vazio, para que o maven não pensasse que o pai era local. Isso ocorre de acordo com a sugestão de SO no Hudson: falha de compilação: POM pai não resolvível e neste fórum nabble . Isso não teve efeito.
Também tentei garantir que o repositório estivesse listado explicitamente em meu settings.xml, mas isso também não teve efeito.
Em seguida, assegurei que o mvn fosse forçado a procurar no repositório, em vez de confiar em sua própria história, conforme discutido neste blog por Sarthon . Infelizmente, esse também não era o problema.
Em algum desespero, revisitei meu MAVEN_OPTS para garantir que não estivesse afetando minhas configurações de proxy. Eles estavam corretos, embora com o valor não citado:
Então, finalmente, mudei a configuração do proxy para o meu settings.xml e funcionou:
Realmente não sei por que meu MAVEN_OPTS original não estava funcionando (aspas?) Enquanto a configuração settings.xml funcionou. Gostaria de reverter a correção e verificar cada etapa novamente, mas perdi muito tempo. Irá relatar como e quando.
fonte
Eu sei que isso não é realmente uma resposta para a pergunta, mas pode valer a pena saber para alguém que está pesquisando neste post. Também é possível instalar um proxy de repositório Maven como o nexus .
Seu maven seria configurado para entrar em contato com o proxy local do Nexus, e o Nexus recuperaria (e armazenaria em cache) os artefatos. Ele pode ser configurado através de uma interface da web e possui suporte para proxies (http).
Isso pode ser uma vantagem, especialmente em uma empresa, pois os artefatos estão disponíveis localmente e podem ser baixados rapidamente, e você não depende mais da disponibilidade de repositórios externos do Maven.
Para vincular de volta à pergunta; com o Nexus, existe uma boa interface gráfica para a configuração do proxy, e ela precisa ser feita em um único local, e não para todos os desenvolvedores.
fonte
se você é novo na configuração de proxy para o Maven No meu caso, vá primeiro e verifique o clima da pasta pessoal. Há uma
.m2
pasta e deve haver um arquivo com o nomesettings.xml
se não for criado, cole-o e altere-ohost
eport
, se necessário, altere ononProxyHosts
Se, em qualquer caso, isso não der certo, faça as alterações neste local da Pasta Pessoal.
Estou usando o Eclipse como meu IDE
Espero que isso ajude !!
Nota: Para remover o proxy, vá
settings.xml
para algum outro lugarfonte
Se o maven funciona através de proxy, mas não de alguns dos plugins que ele está chamando, tente configurar
JAVA_TOOL_OPTIONS
também com as-Dhttp*.proxy*
configurações.Se você já
JAVA_OPTS
acabou de fazerfonte
Exceto pelas técnicas mencionadas acima, com algum esforço, você pode executar o maven por meio do proxy usando a biblioteca jproxyloader (há um exemplo na página de como fazer isso: http://jproxyloader.sourceforge.net/ ). Isso permite configurar o proxy de meias apenas para fazer o download de artefatos.
Na solução mencionada por duanni (configurando -DsocksProxyHost), há um problema. Se você tiver testes de integração em execução no banco de dados local (ou outros testes que se conectem ao URL, que não devem passar por proxy). Esses testes deixarão de funcionar porque as conexões com o banco de dados também serão direcionadas ao proxy. Com a ajuda do jProxyLoader, você pode configurar o proxy apenas para o host do nexus. Além disso, se você quiser, pode passar as conexões ao banco de dados através de outro proxy.
fonte
Algumas vezes você precisa adicionar outras
<proxy></proxy>
tags e especificar o https nas tags de protocolo:<protocol>https</protocol>
fonte
As postagens acima ajudaram a resolver meu problema. Além do que foi dito acima, tive que fazer as seguintes alterações para que funcionasse:
As configurações de rede do JRE do Maven modificadas (\ jre \ lib \ net.properties) para usar a configuração de proxy do sistema.
Configurações de servidor proxy incluídas em settings.xml. Não forneci configurações de nome de usuário e senha para usar a autenticação NTLM.
fonte
O Maven fornece um método interno para fazer isso, por meio de um arquivo chamado settings.xml , e isso foi abordado em outras respostas. No entanto, é habitual, especialmente no Linux, que as ferramentas de linha de comando usem
https_proxy
automaticamente o proxy especificado pela variável de ambiente .Para seguir o princípio Não se repita (que se destina a ajudá-lo a evitar erros), seria bom se também
mvn
pudesse trabalhar automaticamente com isso.Aqui está um script de shell que faz as conversões necessárias:
Você pode nomear algo assim
proxied_mvn
e executá-lo como:Como alternativa, você pode simplesmente mover a configuração do ambiente para seus scripts de inicialização.
Pegadinhas
Há muitas coisas que podem dar errado ao tentar configurar o Maven para acessar um Nexus por meio de um proxy. Felizmente, este script ajudará com alguns dos problemas mais complicados, mas outros permanecem:
Credenciais do Nexus disponíveis e corretas (somente se necessário)
Verificar com
mvn help:effective-settings
Cache do Maven: "a resolução não será tentada novamente"
mvn clean package --update-snapshots
Saída de parede de texto do Maven - você precisa observar atentamente a saída para garantir que as mensagens de erro não sejam sutilmente diferentes entre as execuções
Versões mais antigas do Java podem exigir em
_JAVA_OPTIONS
vez deJAVA_TOOL_OPTIONS
.epílogo
Há mais de um tipo de proxy . Correspondentemente, há mais de uma maneira pela qual essa pergunta foi interpretada - contribuindo para o grande número de respostas díspares aqui.
Abordei explicitamente o caso de um servidor proxy da Web (HTTP / HTTPS) , usado para acessar a Internet a partir de uma rede da empresa (para algumas empresas). Isso pode ser notavelmente diferente de um proxy SOCKS , que também foi abordado em algumas respostas aqui.
Ah, a propósito, uma vez que ele usa
JAVA_TOOL_OPTIONS
, essas soluções também podem ser aplicadas à execução de outros aplicativos Java dentro de um proxy .Dica de partição ... Meu exemplo acima usa
http://localhost:58080
. Isso ocorre porque eu configurei o encaminhamento de porta do meuCLIENT_PROXY=localhost:58080
para o proxy de rede real usando o WSL no meu cliente de acesso remoto para executar:fonte