2009-07-22 11 views
28

Estoy construyendo mi proyecto con Apache Maven y tener un repositorio personalizado configurado pero cuando llega el repositorio simplemente se cuelga durante mucho tiempo con¿Cómo hacer que maven agote el tiempo de espera antes de descargar dependencias?

Descargando: http://maven.mycompany.com/m2/org/springframework/spring/2.5.6/spring-2.5.6.pom

después de unos minutos se va y descargas desde el repositorio central de

Descargando: http://repo1.maven.org/maven2/org/springframework/spring/2.5.6/spring-2.5.6.pom 12K descargado (primavera-2.5.6.pom)

quiero que el tiempo de espera para ser mucho más rápido que eso. Esto sucede con todas las versiones más nuevas de maven. La versión 2.0.6 o anterior no tenía este problema, se agotaría el tiempo de espera mucho más rápido.

+0

se ve como http://www.jroller.com/mrdon/entry/making_maven_2_not_suck ha habido algunos intentos de esto, pero no puedo encontrar la manera de usarlo. – rado

Respuesta

21

En las versiones de Maven anteriores a la 2.1, no hay forma de configurar el tiempo de espera del cliente, pero puede configurarlo para buscar actualizaciones con menos frecuencia si establece la política de actualización. Esto aborda parcialmente el problema.

Por ejemplo:

<repository> 
    <id>myrepo</id> 
    <url>http://maven.mycompany.com/m2</url> 
    <releases> 
    <enabled>true</enabled> 
    <updatePolicy>daily</updatePolicy> 
    </releases> 
    <snapshots> 
    <enabled>false</enabled> 
    <updatePolicy>always</updatePolicy> 
    </snapshots> 
</repository> 

Los valores válidos son:

  • siempre - comprobar siempre cuando Maven se inicia nuevas versiones de las instantáneas
  • Nunca - Nunca comprobar si hay versiones más nuevas remotas. Una vez desactivadas, se pueden realizar actualizaciones manuales.
  • diaria (por defecto) - comprobar en la primera carrera del día (hora local)
  • intervalo: XXX - Revisar toda la XXX minutos

Otra consideración es el software que está utilizando para alojar su repositorio interno . Con un administrador de repositorio como Nexus, puede administrar todas sus conexiones de repositorio remoto externo a través del administrador y configurar el tiempo de espera para esas conexiones remotas. Entonces, su cliente solo consultará al administrador del repositorio, que debe responder tan rápido como , ya que los tiempos de espera lo permiten.


Actualización:

Si conoce las dependencias no van a ser servido por un repositorio en particular, puede separarlo en un perfil, por lo que no se hace referencia en esa construcción.

<profiles> 
    <profile> 
    <id>remote</id> 
    <repositories> 
     <repository> 
     <id>central</id> 
     <url>http://repo1.maven.org</url> 
     <releases><enabled>true</enabled></releases> 
     <snapshots><enabled>false</enabled></snapshots> 
     </repository> 
     ... 
    </repositories> 
    </profile> 
    <profile> 
    <id>internal</id> 
    <repositories> 
     <repository> 
     <id>myrepo</id> 
     <url>http://maven.mycompany.com/m2</url> 
     <releases><enabled>true</enabled></releases> 
     <snapshots><enabled>false</enabled></snapshots> 
     </repository> 
     ... 
    </repositories> 
    </profile> 
</profiles> 

Con la configuración anterior, corriendo mvn package -Premote no se conectará al repositorio interno, por lo que el tiempo de espera no será un factor.

Puede evitar tener que especificar los perfiles en cada generación, añadiendo un poco de configuración adicional para su configuración:

<settings> 
    ... 
    <activeProfiles> 
    <activeProfile>internal</activeProfile> 
    <activeProfile>remote</activeProfile> 
    </activeProfiles> 
    ... 
</settings> 

Para Maven 2.1 se puede establecer el tiempo de espera mediante la adición de una configuración en un servidor en la configuración de Maven (~/.m2/settings.xml por defecto), por ejemplo:

<server> 
    <id>myrepo</id> 
    <configuration> 
    <timeout>5000</timeout> <!-- 5 seconds --> 
    </configuration> 
</server> 
+0

No tenía conocimiento de estas políticas de actualización, pero acabo de actualizar algunas dependencias, por lo que debe salir y descargarlas. Estoy de acuerdo con el administrador de repositorios, pero como estoy asesorando a esta compañía, solo puedo hacer el trabajo que me piden. Tal vez pueda usar un administrador de repositorios en el futuro, aunque esa será una cosa más que tienen que mantener. – rado

+0

Bastante justo, he actualizado mi respuesta con una solución que puede ayudar en su situación actual. –

+0

Para trabajarla alrededor de él por el momento lo que hice fue eliminar el del pom.xml, MVN correr y dejar que se descarga desde el repo1, a continuación, poner mi repositorio personalizado espalda. – rado

0

Un truco rápido y sucio es la adición de una entrada del archivo hosts personalizados para redirigir las peticiones de red a el repositorio inválido a uno válido.

+0

Suena como una buena idea, ¿cómo se vería eso? Supongo que te refieres a '/ etc/hosts' en Linux. –

Cuestiones relacionadas