2012-09-26 31 views
5

tengo los siguientes proyectos organizados de una manera estructurada plana:Maven proyecto de varios módulos y Jenkins

parentProject 
+-pom.xml 

projectWeb <depends on libraryA and libraryB> 
+-pom.xml 

libraryA 
+-pom.xml 

libraryB 
+-pom.xml 

El pom.xml dentro del parentProject tiene referencias a los otros módulos y su herencia y se utiliza para DependencyManagement, aquí es un fragmento:

<project> 
    .... 
    <modules> 
     <module>../projectWeb</module> 
     <module>../libraryA</module> 
     <module>../libraryB</module> 
    </modules> 
    <dependencyManagement> 
    ... 
    </dependencyManagement> 
    <build> 
    ... 
    </build> 
    .... 
</project> 

En Jenkins tengo un trabajo experto para cada proyecto, y funciona bien cuando construyo el parentProject, es decir. construye todos los proyectos a los que se hace referencia en la sección modules. El problema que tengo es cuando me comprometo con el SVN un cambio en libraryA, esperaría que después de compilar libraryA, se iniciara una reconstrucción a projectWeb, pero eso no sucedió. ¿Alguien sabe qué estoy haciendo mal?

Gracias de antemano.

EDITAR

Cuando quito la sección de modulesparentProject\pom.xml, funciona como pensábamos, pero perder la ventaja de la agregación de tener un pom padres.

Respuesta

0

Esto debe configurarse en el trabajo jenkins. Ver "trabajo libraryA"/"Configuración"/"Construir disparadores"/"Construir después de otros proyectos se construyen"

+0

Gracias por la respuesta, pero cuando escribí la pregunta editada, si eliminé los módulos del pom padre, las compilaciones se desencadenan como se esperaba, es decir, si construyo 'libraryA',' proyectWeb' se construye automáticamente, sin la configuración Mencionaste. – sivainvi

1

Parece que usted está pidiendo a su padre POM que hacer dos cosas:

  1. configurar gestión de la dependencia cosas
  2. agregada su construcción

por lo general es mejor si se divide esto en dos poms del pom - una matriz para # 1 y un pom agregado para # 2. A continuación, tendría algo así ..

[root dir] aggregate pom.xml 
+ /parent 
+ /web 
+ /libA 
+ /libB 

Ver esta respuesta para más detalles: https://stackoverflow.com/a/3301162/211993

Se podría entonces configurar Jenkins de revisar el directorio raíz y ejecutar "mvn instalación limpia"

+2

¿Puede explicar por qué "generalmente es mejor si se divide ..."? No digo que no lo sea, pero no entiendo por qué es mejor. Lamentablemente, no lo entendí por la respuesta a la que me has vinculado. ¡Gracias! – Ittai

+1

Por lo tanto, inicialmente, solo ayuda con la separación de preocupaciones: el agregador es responsable del orden en que se crean los módulos, el padre es responsable de las versiones de dependencia y cosas como los detalles de conexión de SCM. – dan

+1

Además, he visto ejemplos en los que las personas han dividido sus padres en partes comunes, que luego se convierten en los padres de otros padres poms. Digamos, por ejemplo, que tienes un par de proyectos que usan Hibernate, puedes llevar ese montón de versiones a un padre padre hibernado, y luego usar eso como un "súper padre" (por así decirlo, acabo de hacer esa frase) proporcionándole versiones coherentes de la biblioteca hibernate en múltiples proyectos que no están vinculados de otra manera. Pero asegúrese de que realmente desea ese enfoque compartido; estás combinando múltiples proyectos juntos que podrían no ser deseables. – dan

Cuestiones relacionadas