Maven fournit une méthode intégrée pour ce faire, via un fichier appelé settings.xml , et cela a été couvert dans d'autres réponses. Cependant, il est courant, en particulier sous Linux, que les outils de ligne de commande utilisenthttps_proxy
automatiquement le proxy spécifié par la variable d'environnement .
Pour suivre le principe Ne vous répétez pas (qui vise à vous aider à éviter les erreurs), ce serait bien simvn
pouvait fonctionner automatiquement avec cela aussi.
Voici un script shell qui effectue les conversions nécessaires:
#! /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} $@
Vous pouvez nommer ceci quelque chose comme proxied_mvn
et l'exécuter comme:
$ https_proxy=http://localhost:58080 ./proxied_mvn clean package
Alternativement, vous pouvez simplement déplacer la configuration de l'environnement dans vos scripts de démarrage.
des pièges
Il y a beaucoup de choses qui peuvent mal tourner lorsque vous essayez de configurer Maven pour accéder à un Nexus via un proxy. Espérons que ce script vous aidera à résoudre certains des problèmes les plus difficiles, mais d'autres restent:
Informations d'identification Nexus disponibles et correctes (uniquement si nécessaire)
Vérifier avec mvn help:effective-settings
Mise en cache Maven: "la résolution ne sera pas tentée à nouveau"
mvn clean package --update-snapshots
Sortie de mur de texte Maven - vous devez regarder de près la sortie pour vous assurer que les messages d'erreur ne sont pas subtilement différents entre les exécutions
Les anciennes versions de Java peuvent nécessiter _JAVA_OPTIONS
au lieu de JAVA_TOOL_OPTIONS
.
épilogue
Il existe plus d'un type de proxy . En conséquence, il y a plus d'une façon dont cette question a été interprétée - contribuant au grand nombre de réponses disparates ici.
J'ai explicitement abordé le cas d'un serveur proxy Web (HTTP / HTTPS) , utilisé pour accéder à Internet à partir d'un réseau d'entreprise (pour certaines entreprises). Cela peut être notamment distinct d'un proxy SOCKS , qui a également été abordé dans certaines réponses ici.
Oh au fait, puisqu'elle utilise JAVA_TOOL_OPTIONS
, cette solution peut également être appliquée à l' exécution de vos autres applications Java dans un proxy .
Indice de séparation ... Mon exemple ci-dessus utilise http://localhost:58080
. C'est parce que j'ai configuré la redirection de port de mon CLIENT_PROXY=localhost:58080
au proxy réseau réel en utilisant WSL sur mon client d' accès à distance pour exécuter:
ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY