¿Cómo uso Maven a través de un proxy?

Quiero compartir mi experiencia de usar maven a través de un proxy.

Lo más probable es que enfrente excepciones y mensajes como:

 metadatos del repository para: 'org.apache.maven.plugins' no se pudieron recuperar de 
 repository: central debido a un error: error al transferir el archivo: conexión rechazada: conectar

o

 [ADVERTENCIA] No se pudo 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 
 las dependencias no se pudieron resolver: 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?

Para obtener detalles sobre la configuración de un proxy para Maven, consulte la mini guía .

Esencialmente debe asegurarse de que la sección de proxies en la configuración global ( [maven install]/conf/settings.xml ) o la configuración del usuario ( ${user.home}/.m2/settings.xml ) esté configurada correctamente. Es mejor hacerlo en la configuración de usuario para evitar almacenar la contraseña en texto sin formato en una ubicación pública.

Maven 2.1 introdujo el cifrado de contraseñas , pero no he podido comprobar si el cifrado se aplica a la configuración del proxy, así como a las contraseñas del repository (no veo por qué no lo haría).

Para obtener información, hay una configuración de proxy comentada en su configuración.xml e instrucciones sobre cómo modificarla.

Desde la mini-guía, su configuración debería verse más o menos así:

  [...]   true http proxy.somewhere.com 8080 proxyuser somepassword www.google.com|*.somewhere.com   [...]  

¿Cómo usar un proxy de calcetines?

Configure un túnel SSH a un servidor en alguna parte:

 ssh -D $PORT $USER@$SERVER 

Linux (bash):

 export MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT" 

Windows:

 set MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT" 

También tuve este problema y lo resolví editando el archivo settings.xml en mi carpeta .m2. Mi settings.xml es así ahora:

    genproxy true http proxyHost 3128 username password    

También tenga en cuenta que algunos complementos (los recursos remotos vienen a la mente) usan una biblioteca muy antigua que solo acepta la configuración del proxy a través de MAVEN_OPTS;

 -Dhttp.proxyHost= -Dhttp.proxyPort= -Dhttps.proxyHost= -Dhttps.proxyPort= 

Puede que estés atascado en auth para este.

Esos son causados ​​por 2 problemas:

  1. Necesita agregar la configuración del proxy a su settings.xml. Aquí hay un truco en su campo de nombre de usuario. Asegúrese de que se vea como dominio \ nombre de usuario. Establecer el dominio allí y poner esta barra exactamente es importante ‘\’. Es posible que desee utilizar la etiqueta si su contraseña contiene caracteres no compatibles con xml.
  2. Me he dado cuenta de que maven 2.2.0 no funciona a veces a través de un proxy, donde 2.2.1 funciona perfectamente bien.

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 tema durante 6 horas, como lo hice.

Solo para agregar mis propias experiencias con esto: el proxy de mi compañía es http://webproxy.intra.companyname.com:3128 . Para que maven pueda trabajar a través de este proxy, la configuración debe ser exactamente como esta

    default true http webproxy.intra.companyname.com 3128    

A diferencia de algunos otros archivos de configuración proxy, el protocol aquí describe cómo conectarse al servidor proxy, no qué tipos de protocolo deben ser proxies. La parte http del objective debe separarse del nombre de host, de lo contrario no funcionará.

Para configurar Maven Proxy :

Edite la sesión de proxies en su archivo ~ / .m2 / settings.xml . Si no puede encontrar el archivo, cree uno.

    httpproxy true http your-proxy-host your-proxy-port local.net|some.host.com   httpsproxy true https your-proxy-host your-proxy-port local.net|some.host.com    

o

Edite la sesión de proxies en su {M2_HOME} /conf/settings.xml

Espero eso ayude.. 🙂

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 agregar.

He tenido un problema similar al tratar de comstackr el portlet-bridge en Windows, obteniendo los siguientes errores:

 Descargando: http://repo1.maven.org/maven2/org/apache/portals/bridges-pom/1.0/bridges-pom-1.0.pom
 [DEBUG] Lectura del archivo de seguimiento de resolución C: \ Documents and Settings \ myuser \ .m2 \ repository \ org \ apache \ portals \ bridges-pom \ 1.0 \ bridges-pom-1.0.pom.lastUpdated
 [DEBUG] Cómo escribir el archivo de seguimiento de resolución C: \ Documents and Settings \ myuser \ .m2 \ repository \ org \ apache \ portals \ bridges-pom \ 1.0 \ bridges-pom-1.0.pom.lastUpdated
 [ERROR] La comstackción no pudo leer 1 proyecto -> [Ayuda 1]
 org.apache.maven.project.ProjectBuildingException: se han encontrado algunos problemas al procesar los POM:
 [FATAL] POM principal no resoluble: no se pudo transferir el artefacto 
  org.apache.portals: bridges-pom: pom: 1.0 from / to central (http://repo1.maven.org/maven2): Error al transferir el archivo: repo1.maven.org y puntos 'parent.relativePath' en el local incorrecto 
  POM @ línea 23, columna 11
 ...
 [ERROR] El proyecto org.apache.portals.bridges: portals-bridges-common: 2.0 (H: \ path_to_project \ portals-bridges-common-2.0 \ pom.xml) tiene 1 error
 [ERROR] POM primario no resoluble: no se pudo transferir el artefacto org.apache.portals: bridges-pom: pom: 1.0 from / to central (http://repo1.maven.org/maven2):
 Error al transferir el archivo: repo1.maven.org y puntos 'parent.relativePath' en el POM local incorrecto @ línea 23, columna 11: host desconocido repo1.maven.org -> [Ayuda 2]
 ...
 [ERROR] Para obtener más información sobre los errores y posibles soluciones, lea los siguientes artículos:
 [ERROR] [Ayuda 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
 [ERROR] [Ayuda 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException

Intenté un par de cosas, siguiendo un poco de navegación:

  • 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 Hudson build fail: POM padre no resoluble y en este foro nabble . Esto no tuvo efecto.

  • También intenté asegurar que el repository estuviera explícitamente enlistado en mi settings.xml, pero esto tampoco tuvo efecto.

  • Luego me aseguré de que mvn se viera obligado a buscar el repository, en lugar de confiar en su propia historia, como se discutió en este blog por Sarthon . Desafortunadamente, este tampoco era el problema.

  • En un momento de desesperación, revisé mis MAVEN_OPTS para asegurarme de que no estaba en problemas con la configuración de mi proxy. Estos fueron correctos, aunque con el valor sin citar:

    establecer MAVEN_OPTS = -Dhttp.proxyHost = myproxy.mycompany.com -Dhttp.proxyPort = 8080 -Xmx256m

  • Entonces, finalmente, moví la configuración del proxy a mi settings.xml y esto funcionó:

    genproxy true http 

Sé que esto no es realmente una respuesta a la pregunta, pero podría valer la pena saber si alguien está buscando esta publicación. También es posible instalar un proxy de repository Maven como nexus .

Su experto estaría configurado para contactarse con el proxy Nexus local, y Nexus luego recuperaría (y almacenaría en caché) los artefactos. Se puede configurar a través de una interfaz web y tiene soporte para proxies (http).

Esto puede ser una ventaja, especialmente en una empresa, ya que los artefactos están disponibles localmente y pueden descargarse rápidamente, y usted ya no depende de la disponibilidad de repositorys Maven externos.

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 cada desarrollador.

Gracias @krosenvold.

Si los cambios del archivo de configuración no funcionan, intente esto en el símbolo del sistema que tiene el archivo POM.

 mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080 

Esto me ha ayudado inmediatamente después de un cambio de contraseña.

Si maven funciona a través del proxy pero no de algunos de los complementos que está invocando, intente configurar también -Dhttp*.proxy* con la -Dhttp*.proxy* .

Si ya has JAVA_OPTS simplemente hazlo

 export JAVA_TOOL_OPTIONS=$JAVA_OPTS 

Ejecuto cntlm localy, configurado con hashes de contraseña NTLMv2 para autenticar con el proxy corporativo y uso

 export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=3128" 

usar ese proxy de maven . Por supuesto, el proxy que utiliza debe admitir cntlm / NTLMv2 .

Excepto por las técnicas mencionadas anteriormente, con un poco de esfuerzo, puede ejecutar maven a través del proxy utilizando la biblioteca jproxyloader (hay un ejemplo en la página de cómo hacer esto: http://jproxyloader.sourceforge.net/ ). Esto permite configurar el 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 ir a través del 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.

Las publicaciones anteriores ayudaron a resolver mi problema. Además de lo anterior, tuve que hacer los siguientes cambios para que funcione:

  • Se modificó la configuración de red de JRE de Maven (\ jre \ lib \ net.properties) para usar la configuración de proxy del sistema. https.proxyHost = proxy DNS https.proxyPort = puerto proxy

    • Se incluye la configuración del servidor proxy en settings.xml. No proporcioné la configuración de nombre de usuario y contraseña para usar la autenticación NTLM.