Maven proporciona un método incorporado para hacerlo, a través de un archivo llamado settings.xml , y esto se ha cubierto en otras respuestas. Sin embargo, es habitual, particularmente en Linux, que las herramientas de línea de comandos usenhttps_proxy
automáticamente el proxy especificado por la variable de entorno .
Para seguir el principio de No repetirse (que está destinado a ayudarlo a evitar errores), sería bueno que también mvn
pudiera funcionar automáticamente con eso.
Aquí hay un script de shell que realiza las conversiones necesarias:
#! /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} $@
Puede llamar a esto algo así proxied_mvn
y ejecutarlo como:
$ https_proxy=http://localhost:58080 ./proxied_mvn clean package
Alternativamente, puede mover la configuración del entorno a sus scripts de inicio.
gotchas
Hay muchas cosas que pueden salir mal al intentar configurar Maven para acceder a un Nexus a través de un proxy. Con suerte, este script ayudará con algunos de los problemas más delicados, pero otros permanecen:
Credenciales de Nexus disponibles y correctas (solo si es necesario)
Comprueba con mvn help:effective-settings
Almacenamiento en caché de Maven: "la resolución no se volverá a intentar"
mvn clean package --update-snapshots
Salida de muro de texto de Maven: debe observar detenidamente la salida para asegurarse de que los mensajes de error no sean sutilmente diferentes entre las ejecuciones
Las versiones anteriores de Java pueden requerir en _JAVA_OPTIONS
lugar de JAVA_TOOL_OPTIONS
.
epílogo
Hay más de un tipo de Proxy . En consecuencia, hay más de una forma de interpretar esta pregunta, lo que contribuye a la gran cantidad de respuestas dispares aquí.
He abordado explícitamente el caso de un servidor proxy web (reenvío HTTP / HTTPS) , que se utiliza para acceder a Internet desde la red de una empresa (para algunas empresas). Esto puede ser notablemente diferente de un proxy SOCKS , que también se ha abordado en algunas respuestas aquí.
Ah, por cierto, dado que usa JAVA_TOOL_OPTIONS
, estas soluciones también se pueden aplicar para ejecutar sus otras aplicaciones Java dentro de un proxy .
Sugerencia de despedida ... Mi ejemplo anterior usa http://localhost:58080
. Esto se debe a que configuré el reenvío de puertos desde mi CLIENT_PROXY=localhost:58080
proxy de red real al usar WSL en mi cliente de acceso remoto para ejecutar:
ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY