2010-12-14 11 views
12

Actualmente tengo unos 16 proyectos que construyo con maven que se implementan en el mismo servidor de aplicaciones que conforman algo así como un "portal". Creé un pom padre para manejar configuraciones de dependencias y complementos comunes. Actualmente, mi estructura SVN es similar a esto:proyecto maven de varios módulos con el diseño padre pom y svn

portal_root 
    +project1 
     +tags 
     +branches 
     +trunk 
    +project2 
     . 
     . 
     . 
    +projectn 
    pom.xml 

Los proyectos individuales se implementan por separado. Es decir, project1 no tiene una dependencia en project2 y cada uno se puede modificar e implementar sin tener que modificar nada más.

Esto presenta un problema con SVN, ya que si otro desarrollador quisiera verificar la raíz completa del "portal" (para obtener también el pom principal), también desplegaría de forma predeterminada copias de todas las etiquetas y ramas. No es realmente ideal.

La única otra cosa que se me ocurre es usar algo como esto:

portal_root 
    +tags 
    +branches 
    +trunk 
     +project1 
       +src 
       pom.xml 
     +project2 
      . 
      . 
      . 
     pom.xml 

Sin embargo, ahora todos los cambios del proyecto se realizará un seguimiento de la carpeta etiquetas. Esto no es un gran problema para mí, pero la ramificación ahora parece convertirse en un dolor.

También estoy trabajando en conectar Teamcity en esto también, lo que sería un poco más fácil ahora, ya que solo tendría que mirar un solo directorio (por ejemplo, etiquetas) para ver todo lo que necesita construirse. También estoy implementando artefactos en un repositorio de Nessus de la empresa.

Espero que alguien me pueda dar algunas sugerencias aquí, ya que no he podido encontrar ninguna documentación decente que describa todo el ciclo de vida de la construcción y las mejores prácticas aquí.

Me gusta la idea de poder construir e implementar todos los proyectos con un solo comando maven. También me gusta tener todas las dependencias comunes, la información del repositorio y la información del complemento en un solo lugar.

Respuesta

25

Puede utilizar siguiente distribución:

+parent-project 
    pom.xml 
+child-project-1 
    pom.xml 
+child-project-2 
    pom.xml 

En proyecto principal pom complemento:

<modules> 
    <module>../child-project-1</module> 
    <module>../child-project-2</module> 
</modules> 

En los proyectos de los niños pom agrega:

<parent> 
    <artifactId><!-- parent artifactId --></artifactId> 
    <groupId><!-- parent groupdId --></groupId> 
    <version><!-- parent version --></version> 
    <relativePath>../parent-project</relativePath> 
</parent> 

Niños Proyectos opcionalmente puede ser dependiente.

siguientes enlaces también pueden ayudar:

+0

¡Esto resolvió perfectamente mi problema! ¡Gracias! – Casey

+0

Asegúrese de agregar datos principales como una dependencia si desea usar el proyecto principal en el elemento secundario. – cevaris

4

Una variación del enfoque de JohnS sería utilizar svn:externals para enganchar tronco/tags/ramas apropiadas de sus subproyectos a la tronco/etiqueta/rama apropiada de su proyecto principal. De esta forma, verificando una variante de tu padre se obtendría toda la versión correcta de los otros proyectos.

Esto tiene sentido solo si es razonable realizar un pago conjunto de todos sus proyectos.

+0

Sería más útil comentar mi enfoque, en lugar de limitarme silenciosamente. Teniendo en cuenta que este enfoque nos ha ayudado a manejar varias versiones específicas de los clientes durante los últimos cuatro años mientras se minimizan las diferencias de código, me interesaría saber qué he estado haciendo mal todo este tiempo. –

+1

Creo que svn: externals es realmente inteligente, especialmente en repositorios svn de grandes empresas. De esta forma, puede vincular un diseño de directorio maven si es necesario sin cambiar toda la estructura repo. – Sylar

Cuestiones relacionadas