Quiero compartir mi experiencia de usar Maven a través de un proxy.
Lo más probable es que enfrentes excepciones y mensajes como:
los metadatos del repositorio para: 'org.apache.maven.plugins' no se pudieron recuperar de repositorio: central debido a un error: Error al transferir el archivo: Conexión rechazada: conectar
o
[ADVERTENCIA] Error al recuperar el descriptor del complemento para org.apache.maven.plugins: maven-clean- plugin: 2.5: Plugin org.apache.maven.plugins: maven-clean-plugin: 2.5 o uno de sus no se pudieron resolver las dependencias: no se pudo leer el descriptor de artefactos para org.apache.maven.plugins: maven-clean-plugin: jar: 2.5
¿Cómo configurar Maven para usar el servidor proxy?
Respuestas:
Para obtener detalles sobre cómo configurar un proxy para Maven, consulte la mini guía .
Esencialmente, debe asegurarse de que la sección proxies en la configuración global (
[maven install]/conf/settings.xml
) o en la configuración del usuario (${user.home}/.m2/settings.xml
) esté configurada correctamente. Es mejor hacer esto en la configuración de usuario para evitar almacenar la contraseña en texto plano en una ubicación pública.Maven 2.1 introdujo el cifrado de contraseña , pero no he podido comprobar si el cifrado se aplica a la configuración del proxy, así como a las contraseñas del repositorio (no veo por qué no lo haría).
Para obtener información, hay una configuración de proxy comentada en settings.xml e instrucciones sobre cómo modificarla.
Desde la mini-guía, su configuración debería verse así:
fuente
<username>
y<password>
deben eliminarse (y no se deben dar contenidos vacíos). Esto me llevó un tiempo darme cuenta.¿Cómo usar un proxy de calcetines?
Configure un túnel SSH para un servidor en algún lugar:
Linux (bash):
Ventanas:
fuente
MAVEN_OPTS
es la única forma en que puedo hacer que Maven descargue a través de HTTPS. El uso de servidores proxy HTTP o HTTPS, ya sea a través deMAVEN_OPTS
osettings.xml
, da como resultadoorg.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec execute INFO: I/O exception (java.net.SocketException) caught when processing request to {tls}->http://proxy.mycompany.com:911->https://repo.maven.apache.org:443: SOCKS: TTL expired
http
proxy:export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=$PORT"
MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080" mvn clean install
Los siguientesmvn
comandos en la misma sesión serán sin ningún proxy.También tuve este problema y lo resolví editando el
settings.xml
archivo en mi.m2
carpeta. Misettings.xml
es así ahora:fuente
También tenga en cuenta que algunos complementos (me vienen a la mente los recursos remotos) usan una biblioteca realmente antigua que solo acepta la configuración del proxy a través de MAVEN_OPTS;
Puede que esté atascado en la autenticación para este.
fuente
Para configurar el Proxy Maven :
Edite la sesión de proxy en su archivo ~ / .m2 / settings.xml . Si no puede encontrar el archivo, cree uno.
o
Edite la sesión de proxy en su {M2_HOME} /conf/settings.xml
Espero eso ayude.. :)
fuente
Esos son probablemente causados por 2 problemas:
Si se omiten algunos de ellos, Maven podría fallar con mensajes de error aleatorios.
Solo espero haber salvado a alguien de buscar en Google este problema durante 6 horas, como lo hice.
fuente
Solo para agregar mis propias experiencias con esto: el proxy de mi empresa es
http://webproxy.intra.companyname.com:3128
. Para que maven funcione a través de este proxy, la configuración debe ser exactamente asíA diferencia de otros archivos de configuración de proxy,
protocol
aquí se describe cómo conectarse al servidor proxy, no qué tipos de protocolo se deben proxy. Lahttp
parte del objetivo debe separarse del nombre de host, de lo contrario no funcionará.fuente
Gracias @krosenvold.
Si los cambios en el archivo de configuración no funcionan, intente esto en el símbolo del sistema que tiene el archivo POM.
Esto me ha ayudado inmediatamente después de un cambio de contraseña.
fuente
Corro
cntlm
necesitas cigarros, configurado conNTLMv2
los hashes de contraseñas para la autenticación con el servidor proxy corporativo, y el usopara usar ese proxy de
maven
. Por supuesto, el proxy que use debe ser compatible concntlm
/NTLMv2
.fuente
[Environment]::SetEnvironmentVariable("MAVEN_OPTS", "-DproxyHost=127.0.0.1 -DproxyPort=3128", "Machine")
Y para agregar a este tema, aquí están mis experiencias a continuación ... Realmente extraño y lento, así que pensé que valía la pena agregarlo.
Tuve un problema similar al intentar construir el portlet-bridge en Windows, obteniendo los siguientes errores:
Intenté un par de cosas, luego de surfear un poco:
Intenté establecer parent.relativePath como vacío para que maven no pensara que el padre era local. Esto es según la sugerencia de SO en la falla de compilación de Hudson: POM padre no resoluble y en este foro molesto . Esto no tuvo efecto.
También intenté asegurarme de que el repositorio apareciera explícitamente en mi settings.xml, pero esto tampoco tuvo ningún efecto.
Luego me aseguré de que mvn se viera obligado a buscar el repositorio, en lugar de confiar en su propia historia, como se discutió en este blog de Sarthon . Desafortunadamente, este tampoco era el problema.
En cierta desesperación, volví a visitar mis MAVEN_OPTS para asegurarme de que no estaba fallando en mi configuración de proxy. Estos fueron correctos, aunque con el valor sin comillas:
Entonces, finalmente, moví la configuración del proxy a mi settings.xml y funcionó:
Realmente no estoy seguro de por qué mi MAVEN_OPTS original no funcionaba (¿comillas?) Mientras que la configuración settings.xml sí funcionaba. Me gustaría revertir la solución y verificar cada paso nuevamente, pero he perdido demasiado tiempo. Informará de nuevo cuando y cuando.
fuente
Sé que esto no es realmente una respuesta a la pregunta, pero podría valer la pena saberlo para alguien que busque esta publicación. También es posible instalar un proxy de repositorio Maven como nexus .
Su experto se configuraría para contactar al proxy local de Nexus, y Nexus luego recuperaría (y guardaría en caché) los artefactos. Se puede configurar a través de una interfaz web y tiene soporte para servidores proxy (http).
Esto puede ser una ventaja, especialmente en una empresa, ya que los artefactos están disponibles localmente y se pueden descargar rápidamente, y ya no depende tanto de la disponibilidad de repositorios externos de Maven.
Para vincular de nuevo a la pregunta; Con Nexus hay una buena GUI para la configuración del proxy, y debe hacerse en un solo lugar, y no para todos los desarrolladores.
fuente
si eres nuevo en la configuración del proxy para Maven En mi caso, primero ve y comprueba el clima de tu carpeta de inicio, hay una
.m2
carpeta y en ella debe haber un archivo llamadosettings.xml
si no lo creas, y pega esto y cambiahost
yport
, si es necesario, cambia elnonProxyHosts
En cualquier caso, esto no tiene éxito, vaya y haga los cambios en esta ubicación de la carpeta de inicio
Estoy usando Eclipse como mi IDE ¡
Espero que esto ayude!
Nota: para eliminar el proxy, simplemente muévase
settings.xml
a otro lugarfuente
Si Maven funciona a través del proxy pero no algunos de los complementos que está invocando, intente configurarlo
JAVA_TOOL_OPTIONS
también con la-Dhttp*.proxy*
configuración.Si ya lo
JAVA_OPTS
acabas de hacerfuente
Excepto por las técnicas mencionadas anteriormente, con algo de esfuerzo, puede ejecutar maven a través de proxy utilizando la biblioteca jproxyloader (hay un ejemplo en la página de cómo hacer esto: http://jproxyloader.sourceforge.net/ ). Esto permite configurar proxy de calcetines solo para descargar artefactos.
En la solución mencionada por duanni (configuración -DsocksProxyHost) hay un problema. Si tiene pruebas de integración que se ejecutan en la base de datos local (u otras pruebas que se conectan a la URL, que no deberían pasar por proxy). Estas pruebas dejarán de funcionar porque las conexiones a la base de datos también se dirigirán al proxy. Con la ayuda de jProxyLoader, puede configurar el proxy solo para el host nexus. Además, si lo desea, puede pasar las conexiones a la base de datos a través de otro proxy.
fuente
Algunas veces necesita agregar otras
<proxy></proxy>
etiquetas y especificar las https en las etiquetas de protocolo:<protocol>https</protocol>
fuente
Las publicaciones anteriores ayudaron a resolver mi problema. Además de lo anterior, tuve que hacer los siguientes cambios para que funcionara:
Se modificó la configuración de red JRE de Maven (\ jre \ lib \ net.properties) para usar la configuración de proxy del sistema.
Configuración del servidor proxy incluida en settings.xml. No proporcioné configuraciones de nombre de usuario y contraseña para usar la autenticación NTLM.
fuente
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 usen
https_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:
Puede llamar a esto algo así
proxied_mvn
y ejecutarlo como: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 deJAVA_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 miCLIENT_PROXY=localhost:58080
proxy de red real al usar WSL en mi cliente de acceso remoto para ejecutar:fuente