2011-07-06 45 views
8

Estoy implementando un repositorio Nexus para Maven y arquetipos personalizados en él.Catálogo de arquetipos Maven: especificar ubicaciones personalizadas

Me gustaría ejecutar mvn archetype:generate y recibir una lista de arquetipos internos + personalizados.

La única forma que encontré para solicitar arquetipos personalizados (de una manera ergonómica, es decir, sin URL) es definir la ruta del catálogo de arquetipos como una propiedad en la configuración. Esta no es una solución válida porque quiero varios catálogos (y esta propiedad no puede ser anulada en CLI).

¿Alguien tiene una idea de cómo hacerlo?

Gracias de antemano,


[EDIT] me encontré con un informe de problema relacionado con: http://jira.codehaus.org/browse/ARCHETYPE-273

Y me di cuenta de que durante archetype:generate, Maven intenta alcanzar el repositorio central:

[DEBUG] Searching for remote catalog: http://repo1.maven.org/maven2/archetype-catalog.xml 
[DEBUG] Searching for remote catalog: http://repo1.maven.org/maven2 

Termina con un "Tiempo de espera de conexión agotado" porque no especifiqué (y no quiero) un proxy ...

No entiendo por qué no comprueba experto catálogo nexo ...

+0

¿Alguna noticia? Estoy teniendo el mismo problema aquí :( – Ruben

Respuesta

5

También tengo un Nexus configurado para reflejar los repositorios de Maven y por lo tanto el catálogo remoto también.

<mirror> 
    <!--This sends everything else to /public --> 
    <id>nexus</id> 
    <mirrorOf>*</mirrorOf> 
    <url>http://afbwt03:8081/nexus/content/groups/JavaRepo/</url> 
</mirror> 

y:

<profile> 
    <id>nexus</id> 
    <repositories> 
     <repository> 
      <id>central</id> 
      <url>http://central</url> 
      <releases> 
       <enabled>true</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> 
</profile> 

estoy en condiciones de acceder al catálogo remoto sólo cuando se utiliza la siguiente línea de comandos Maven:

mvn archetype:generate -DarchetypeCatalog=http://afbwt03:8081/nexus/content/groups/JavaRepo 

Si no definen la variable archetypeCatalog , Obtengo el mismo comportamiento que tú: intentar acceder al repo1. ... aunque algunos espejos están configurados.

+0

Desafortunadamente, a partir de Maven 3 (creo) pasando una URL o nombre de archivo de un catálogo en la línea de comando a 'mvn archetype: generate -DarchetypeCatalog = ...' ya no es posible Solo se admiten locales, remotos e internos, y la configuración tiene que suceder [en el archivo settings.xml] (https://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html#archetypeCatalog). –

1

Es necesario tener

  • la propiedad archetypeRepository definido en el perfil activo en su .m2/settings.xml

  • los repositorios y pluginRepositories de nuevo a su espejo, en el mismo id. "central".

  • y, por supuesto, el espejo definido

Apache documentación experto en plug-in arquetipo especifica que archetypeRepository es definible propiedad de usuario: http://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html

Sus .m2/configuración.xml debe tener estos elementos mínimos

<?xml version="1.0" encoding="UTF-8"?> 

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> 


    <mirrors> 
     <mirror> 
     <id>central</id> 
     <name>Mirror for maven central</name> 
     <url>http://mymvnhost:8081/nexus/content/groups/public/</url> 
     <mirrorOf>*</mirrorOf> 
     </mirror> 

    </mirrors> 

    <profiles> 
    <profile> 
     <id>dev</id> 

     <properties> 
     <archetypeRepository>http://mymvnhost:8081/nexus/content/groups/public/</archetypeRepository> 
     </properties> 

     <repositories> 
      <repository> 
       <id>central</id> 
       <url>http://central</url> 
       <releases><enabled>true</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> 

    </profile> 
    </profiles> 

    <activeProfiles> 
    <activeProfile>dev</activeProfile> 
    </activeProfiles> 
</settings> 
+0

¡funciona para mí! ¡Gracias! – Cheloute

Cuestiones relacionadas