Maven bietet dazu eine integrierte Methode über eine Datei namens settings.xml , die in anderen Antworten behandelt wurde. Insbesondere unter Linux ist es jedoch üblich, dass Befehlszeilentools automatisch den von der Umgebungsvariablen angegebenen Proxy verwendenhttps_proxy
.
Um dem Prinzip „ Nicht wiederholen“ zu folgen (das Ihnen helfen soll, Fehler zu vermeiden), wäre es schön, wenn Sie auch mvn
damit automatisch arbeiten könnten.
Hier ist ein Shell-Skript, das die erforderlichen Konvertierungen vornimmt:
#! /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} $@
Sie könnten dies so nennen proxied_mvn
und ausführen als:
$ https_proxy=http://localhost:58080 ./proxied_mvn clean package
Alternativ können Sie das Umgebungssetup einfach in Ihre Startskripte verschieben.
Fallstricke
Es gibt viele Dinge, die schief gehen können, wenn Sie versuchen, Maven für den Zugriff auf einen Nexus über einen Proxy zu konfigurieren . Hoffentlich hilft dieses Skript bei einigen der schwierigsten Probleme, andere bleiben jedoch:
Nexus-Anmeldeinformationen verfügbar und korrekt (nur bei Bedarf)
Überprüfen Sie mit mvn help:effective-settings
Maven-Caching: "Die Auflösung wird nicht erneut versucht."
mvn clean package --update-snapshots
Maven-Textwandausgabe - Sie müssen sich die Ausgabe genau ansehen, um sicherzustellen, dass sich Fehlermeldungen zwischen den Läufen nicht geringfügig unterscheiden
Ältere Versionen von Java erfordern möglicherweise _JAVA_OPTIONS
anstelle von JAVA_TOOL_OPTIONS
.
Epilog
Es gibt mehr als eine Art von Proxy . Dementsprechend gibt es mehr als einen Weg, wie diese Frage interpretiert wurde - was zu der großen Anzahl unterschiedlicher Antworten hier beiträgt.
Ich habe mich explizit mit dem Fall eines Webproxyservers (HTTP / HTTPS) befasst , der für den Zugriff auf das Internet innerhalb eines Unternehmensnetzwerks verwendet wird (für einige Unternehmen). Dies kann sich insbesondere von einem SOCKS-Proxy unterscheiden , auf den hier auch in einigen Antworten eingegangen wurde.
Übrigens, da es verwendet wird JAVA_TOOL_OPTIONS
, können diese Lösungen auch auf die Ausführung Ihrer anderen Java-Anwendungen in einem Proxy angewendet werden .
Abschiedstipp ... Mein Beispiel oben verwendet http://localhost:58080
. Dies liegt daran, dass ich die Portweiterleitung von meinem CLIENT_PROXY=localhost:58080
zum eigentlichen Netzwerkproxy mithilfe der WSL auf meinem RAS- Client eingerichtet habe, um Folgendes auszuführen:
ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY