2009-08-13 16 views
5

Lo que quiero hacer es forzar a Maven a descargar el 'maven-metadata.xml' para cada artefacto que tengo en mi repositorio local.¿Cómo forzar a Maven a descargar maven-metadata.xml del repositorio central?

El comportamiento predeterminado de Maven es descargar solo los metadatos de los repositorios remotos (ver this question).

¿Por qué quiero hacer eso:

Actualmente tengo un repositorio remoto que ejecuta en una máquina de construcción. Por repositorio remoto me refiero a un directorio ubicado en la máquina de compilación que contiene todas las dependencias que necesito para construir mis proyectos de Maven. Tenga en cuenta que no estoy usando un administrador de repositorio como Nexus, el repositorio es solo una copia de un repositorio local que he cargado en mi máquina de compilación.

Sin embargo, dado que mi repositorio local no contenía los archivos 'maven-metadata.xml', estos archivos de metadatos tampoco se encuentran en el repositorio de la máquina de compilación. Si pudiera recuperar los archivos de metadatos del repositorio central, entonces sería posible cargar un repositorio remoto en funcionamiento en mi máquina de compilación.

+0

No me queda claro exactamente lo que quiere decir, o por qué necesita para hacer esto. ¿Puedes explicar lo que estás tratando de lograr? –

Respuesta

8

No desea obtener los metadatos de los repositorios públicos, contendrá todas las versiones disponibles de un artefacto determinado, mientras que su repositorio tendrá algún subconjunto de las versiones.

Vale la pena señalar que realmente sería mejor con un administrador de repositorios. Los siguientes pasos le permiten generar sus metadatos de artefactos una vez. Pero si cambian sus necesidades, tendrá que repetir el proceso o actualizar los archivos manualmente, entonces ¿por qué no simplemente usar un administrador? Nexus puede funcionar de forma autónoma y tiene una huella muy pequeña.


Incluso si usted no está planeando sobre el uso de Nexus para un administrador de repositorio, todavía se puede utilizar para generar sus metadatos.

  1. Primer install Nexus.
  2. localizar el directorio de trabajo Nexus (por defecto $ {} user.home/Sonatype-trabajo.
  3. Copiar el contenido de su repositorio local a la/comunicados subdirectorio nexo entre el trabajo.
  4. Start Nexus y conectar con el Nexus página de inicio en el navegador (por defecto http://localhost:8081/nexus)
  5. sesión con la cuenta de administrador (admin123 contraseña)
  6. Haga clic en la repositorios enlace en el lado izquierdo.
  7. Seleccione el repositorio de prensa, haga clic y clic Reconstruir metadatos

En unos momentos usted debe tener los metadatos generados para todos los artefactos. Luego puede copiarlos donde lo necesite y desinstalar Nexus.

+1

Acepto, necesita repositorios compartidos para la construcción y las máquinas locales. No hay forma de que mantenga sincronizadas las dos copias de los metadatos – sal

+1

La solución funcionó para mí. Además, gracias a sal por el consejo, pero lo que realmente necesito es una solución para el problema, aunque entiendo que esa no es la solución ideal ... –

4

Los repositorios predeterminados se definen en super pom.xml que todos los poms heredan de forma predeterminada.

Si por local quiere decir que solo quiere usar ~/.m2/repos/* entonces trabaje en modo fuera de línea. Añadir <offline>true</offline> a su settings.xml

Si por el local, que quiere decir que su servidor local, se podría instalar un gestor de repositorio como Nexus, modificar el archivo de configuración para usar nexo en "espejos" de esta manera:

<mirror> 
    <id>central-proxy</id> 
    <mirrorOf>central</mirrorOf> 
    <url>my/local/nexus/server</url> 
</mirror> 

Y deshabilita los repositorios remotos que no deseas en Nexus.

+0

Por local me refiero a ~/.m2/repos/*; sin embargo, si utiliza la etiqueta o la bandera -o, Maven no descargará los archivos 'maven-metada.xml' que yo quiera. –

+0

Creo que debe tener diferentes compilación e implementar repos para su máquina remota. Haga que la máquina de compilación use un repositorio maven local para compilación y luego otro lugar en el disco para la implementación. Use algún servidor para hacer que ese segundo repositorio sea visible. También querrás que tus compilaciones locales se desplieguen en ese tercer repositorio. Los metadatos se resolverán en esa situación. – sal

+0

¿y por qué ''? la descripción de arriba me está ayudando. – hari

1

Una cosa que encontré es que alguien estaba haciendo una búsqueda inicial de jarvana y la había colocado dentro del pom, causando un mensaje de error de metadatos. Esto ...

<!-- <repository> 
     <id>jarvana</id> 
     <url>http://www.jarvana.com/jarvana/browse/</url> 
    </repository> --> 

.. lo corrigió y el error desapareció.

0

El administrador de repositorios es genial, pero no quiero instalarlo ni ejecutarlo en mi computadora portátil. Solo quiero guardar recursos. Por lo tanto, mi solución es a continuación:

  1. instalar repositorio como Artifactory (https://www.jfrog.com/artifactory)
  2. plazo se materializan a través de este servidor (localhost: 8081)
  3. plazo se materializan a través de servidor remoto (center.maven.org)
  4. descargar el contenido del caché del artefacto
  5. fusionar a la carpeta: descargar la carpeta del paso 4 y la carpeta en ~/.m2/repository.

ahora tengo una conexión con el repositorio de contenido completo (binario, fuente, xml, MD5, SHA1)

Cuestiones relacionadas