Maven zapewnia wbudowaną metodę robienia tego za pośrednictwem pliku o nazwie settings.xml , co zostało omówione w innych odpowiedziach. Jednak zwyczajowo, szczególnie w Linuksie, narzędzia wiersza poleceń automatycznie używają serwera proxy określonego przez zmienną środowiskowąhttps_proxy
.
Aby postępować zgodnie z zasadą „ Nie powtarzaj się ” (która ma na celu pomóc Ci uniknąć błędów), byłoby miło, gdybyś mvn
mógł również z tym automatycznie pracować.
Oto skrypt powłoki, który dokonuje niezbędnych konwersji:
#! /usr/bin/env bash
function javaproxy {
request_scheme=$1 ; proxy=$2
notscheme=$(echo ${proxy#*://})
scheme=$(echo ${proxy%${notscheme}})
scheme=$(echo ${scheme%://})
hostport=$(echo ${proxy#*//*})
host=$(echo ${hostport%:*})
port=$(echo ${hostport#${host}})
port=$(echo ${port#:})
scheme=$(echo ${scheme:-http})
host=$(echo ${host:-localhost})
port=$(echo ${port:-8080})
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} $@
Możesz nazwać to coś podobnego proxied_mvn
i uruchomić jako:
$ https_proxy=http://localhost:58080 ./proxied_mvn clean package
Alternatywnie możesz po prostu przenieść konfigurację środowiska do swoich skryptów startowych.
gotchas
Jest wiele rzeczy, które mogą się nie udać podczas próby skonfigurowania Mavena do dostępu do Nexusa przez proxy. Mamy nadzieję, że ten skrypt pomoże w niektórych z najbardziej skomplikowanych problemów, ale inne pozostają:
Dane logowania do Nexusa są dostępne i poprawne (tylko w razie potrzeby)
Sprawdź z mvn help:effective-settings
Buforowanie Mavena: „rozdzielczość nie zostanie podjęta ponownie”
mvn clean package --update-snapshots
Wyjście ściany tekstu Maven - musisz uważnie przyjrzeć się wynikowi, aby upewnić się, że komunikaty o błędach nie różnią się subtelnie między uruchomieniami
Starsze wersje Java mogą wymagać _JAVA_OPTIONS
zamiast JAVA_TOOL_OPTIONS
.
epilog
Istnieje więcej niż jeden rodzaj proxy . Odpowiednio, istnieje więcej niż jeden sposób, w jaki zinterpretowano to pytanie - przyczyniając się do dużej liczby rozbieżnych odpowiedzi.
Wyraźnie odniosłem się do przypadku serwera proxy sieci Web (do przodu HTTP / HTTPS) , który jest używany do uzyskiwania dostępu do Internetu z sieci firmowej (w przypadku niektórych firm). Może się to wyraźnie różnić od proxy SOCKS , do którego również odniesiono się w niektórych odpowiedziach tutaj.
Aha tak na marginesie, skoro używa JAVA_TOOL_OPTIONS
, to rozwiązania można zastosować uruchamiania innych aplikacji Java również w proxy .
Wskazówka rozstania ... Mój przykład powyżej używa http://localhost:58080
. Dzieje się tak, ponieważ skonfigurowałem przekierowanie portów z mojego CLIENT_PROXY=localhost:58080
do rzeczywistego sieciowego serwera proxy, używając WSL na moim kliencie dostępu zdalnego, aby uruchomić:
ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY