2012-10-11 27 views
8

Tengo un proyecto que usa un repositorio interno y el repositorio central. ¿Hay alguna manera de configurar el archivo settings.xml para que pueda usar ambos en lugar de solo uno? Cuando añadíUso de múltiples repositorios en Maven

<mirrors> 
    <mirror> 
     <id>MY ID</id> 
     <url>MY URL</url> 
     <mirrorOf>*</mirrorOf> 
    </mirror> 
</mirrors> 

en settings.xml, puedo mirar a mi propio repositorio interno pero anula el repositorio central.

Estoy seguro de que este es un problema común para las personas nuevas en Maven.

Respuesta

8

Hay algunas maneras de hacerlo.

Lo mejor, IMO, es que su servidor de repositorio local actúe como un proxy para Maven Central. Tanto Nexus como Artifactory lo hacen de la caja. Si está utilizando Apache u otro servidor web, debe cambiar.

También puede actualizar la configuración excluyen el servidor de destino de su espejo:

<mirrorOf>*,!MyOtherRepository</mirrorOf> 

Esto funciona si tiene varios servidores de repositorios locales, pero no creo que se pueda excluir el centro de esta manera: de forma predeterminada, Maven busca artefactos en la central, y su servidor actúa como un sustituto de la misma.

Lo cual deja entradas de repositorio explícitas en sus POMS, que hacen referencia al repositorio local. Si su repositorio local solo sirve sus artefactos, esta podría ser la segunda opción más simple (especialmente si utiliza un POM padre que contiene la especificación del repositorio).

+0

No, en realidad tengo un repositorio remoto que sirve para varios artefactos de otras personas.Necesito la configuración a la vez maven verifica los resultados del repositorio central y remoto. –

+0

Una vez más, la forma más fácil de hacerlo es un servidor de repositorio local que actúa como un proxy. Creo que estás atascado con las entradas explícitas '' en tu POM (principal). – parsifal

4

Su directiva de espejo está actualmente duplicando todo. Puede excluir repositorios nombrados así:

<mirrorOf>!myExcludedRepo,*</mirrorOf> 

El espejos de todo lo anterior, excepto el repositorio llamado myExcludedRepo.

Aquí está el Maven guide for mirroring. Tenga en cuenta particularmente la sección marcada Advanced. Hay muchas capacidades allí.

0

He encontrado una respuesta de trabajo, que es cambiar el pom.xml lugar y añadir repositorios remotos sobre la marcha, siguiendo las instrucciones de this link

Gracias por las respuestas, la gente, y me gustaría asumir sus sugerencias pueden ser útil para escenarios más complicados con más repositorios y configuraciones complejas.

+0

Bueno, me alegro de que lo haya encontrado, aunque "Que deja entradas de repositorio explícitas en su POMS" me pareció bastante claro. – parsifal

+0

Bien. Entonces aceptaré tu respuesta :) (aunque ese enlace proporcionó la solución de bajo nivel). –

0

Uso tres repos (usando Nexus), el primero es un repositorio Proxy al que agrego todos los repositorios externos. Los otros dos son mis repositorios internos para el despliegue de lanzamientos e instantáneas. Aquí está mi .m2/settings.xml:

<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"> 
    <!-- http://maven.apache.org/ref/3.0.4/maven-settings/settings.html --> 

    <interactiveMode>true</interactiveMode> 
    <offline>false</offline> 

    <mirrors> 
    <mirror> 
     <id>nexus</id> 
     <mirrorOf>external:*</mirrorOf> 
     <url>http://localhost:3129/nexus/content/groups/public</url> 
    </mirror> 
    </mirrors> 

    <profiles> 
    <profile> 
     <id>nexus</id> 
     <repositories> 
      <repository> 
       <id>central</id> 
       <url>http://central</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
      </repository> 

      <repository> 
       <id>internal.releases</id> 
       <url>http://localhost:3129/nexus/content/repositories/releases</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>false</enabled> 
       </snapshots> 
      </repository>   

      <repository> 
       <id>internal.snapshots</id> 
       <url>http://localhost:3129/nexus/content/repositories/snapshots</url> 
       <releases> 
        <enabled>false</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
      </repository>   
     </repositories> 

     <pluginRepositories> 
      <pluginRepository> 
       <id>central</id> 
       <url>http://central</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
      </pluginRepository> 
     </pluginRepositories> 
     <properties> 
      <downloadSources>true</downloadSources> 
      <downloadJavadocs>true</downloadJavadocs>   
     </properties> 
    </profile> 
    </profiles> 

    <activeProfiles> 
    <activeProfile>nexus</activeProfile> 
    </activeProfiles> 

    <servers> 
    <server> 
     <id>internal.releases</id> 
     <username>admin</username> 
     <password>XXX</password> 
    </server> 
    <server> 
     <id>internal.snapshots</id> 
     <username>admin</username> 
     <password>XXX</password> 
    </server> 
    </servers> 

</settings> 

Maven todos ellos utiliza, por lo que es posible que desee utilizar la función de enrutamiento de Nexus para bloquear "^/mis/privadas/paquetes /.*" por lo que hace No intente buscar paquetes internos de repositorios externos. No he agregado los repos internos al repositorio de proxy.

No necesita ajustar sus archivos pom.xml para que funcionen. Simplemente ingrese "mvn deploy".

Cuestiones relacionadas