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 usemhttps_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:
#! /usr/bin/env bash
function javaproxy {
## using "Shell Parameter Expansion"
request_scheme=$1 ; proxy=$2
notscheme=$(echo ${proxy#*://}) ## parse
scheme=$(echo ${proxy%${notscheme}}) ## remove
scheme=$(echo ${scheme%://}) ## strip
hostport=$(echo ${proxy#*//*}) ## parse
host=$(echo ${hostport%:*}) ## parse
port=$(echo ${hostport#${host}}) ## remove
port=$(echo ${port#:}) ## strip
scheme=$(echo ${scheme:-http}) ## default
host=$(echo ${host:-localhost}) ## default
port=$(echo ${port:-8080}) ## default
echo -n " -D${request_scheme}.proxyHost=${host}"
echo -n " -D${request_scheme}.proxyPort=${port}"
}
JTO=""
if [ $http_proxy ] ; then
JTO="${JTO}$(javaproxy http ${http_proxy})"
fi
if [ $https_proxy ] ; then
JTO="${JTO}$(javaproxy https ${https_proxy})"
fi
if [ $no_proxy ] ; then
JTO="${JTO} -Dhttp.nonProxyHosts=$(echo \"${no_proxy}\"|tr ',' '|')"
fi
export JAVA_TOOL_OPTIONS=${JTO}
echo "JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS}"
mvn_friendliness_options+=--update-snapshots
mvn ${mvn_friendliness_options} $@
Você pode nomear algo assim proxied_mvn
e executá-lo como:
$ https_proxy=http://localhost:58080 ./proxied_mvn clean package
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 de JAVA_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 meu CLIENT_PROXY=localhost:58080
para o proxy de rede real usando o WSL no meu cliente de acesso remoto para executar:
ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY