Maven fornisce un metodo integrato per farlo, tramite un file chiamato settings.xml , e questo è stato trattato in altre risposte. Tuttavia, è consuetudine, in particolare in Linux, che gli strumenti da riga di comando utilizzinohttps_proxy
automaticamente il proxy specificato dalla variabile di ambiente .
Seguire il principio Non ripetere te stesso (che ha lo scopo di aiutarti a evitare errori), sarebbe bello semvn
potesse funzionare automaticamente anche con quello.
Ecco uno script di shell che effettua le conversioni necessarie:
#! /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} $@
Potresti nominare qualcosa del genere proxied_mvn
ed eseguirlo come:
$ https_proxy=http://localhost:58080 ./proxied_mvn clean package
In alternativa, puoi semplicemente spostare la configurazione dell'ambiente negli script di avvio.
trabocchetti
Ci sono molte cose che possono andare storte quando si tenta di configurare Maven per l'accesso a un Nexus tramite un proxy. Speriamo che questa sceneggiatura possa aiutare con alcuni dei problemi più delicati, ma altri rimangono:
Credenziali Nexus disponibili e corrette (solo se necessarie)
Controllare con mvn help:effective-settings
Maven caching: "la risoluzione non verrà tentata"
mvn clean package --update-snapshots
Output wall-of-text Maven: è necessario esaminare attentamente l'output per assicurarsi che i messaggi di errore non siano leggermente diversi tra le esecuzioni
Le versioni precedenti di Java potrebbero richiedere _JAVA_OPTIONS
invece di JAVA_TOOL_OPTIONS
.
epilogo
Esiste più di un tipo di proxy . Di conseguenza, c'è più di un modo in cui questa domanda è stata interpretata - contribuendo al gran numero di risposte disparate qui.
Ho esplicitamente affrontato il caso di un (forward HTTP / HTTPS) server proxy Web , che viene utilizzato per accedere a Internet all'interno di una rete aziendale (per alcune società). Ciò può essere in particolare distinto da un proxy SOCKS , che è stato anche affrontato in alcune risposte qui.
A proposito, dal momento che usa JAVA_TOOL_OPTIONS
, questa soluzione può essere applicata anche all'esecuzione di altre tue applicazioni Java all'interno di un proxy .
Suggerimento per la separazione ... Il mio esempio sopra usa http://localhost:58080
. Questo perché ho impostato il port forwarding dal mio CLIENT_PROXY=localhost:58080
al proxy di rete effettivo utilizzando WSL sul mio client di accesso remoto per eseguire:
ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY