2010-07-27 17 views
12

Soy nuevo en Maven y ahora estoy tratando de configurar mi primer árbol de proyectos. Estoy luchando por entender la diferencia entre dos alternativas:Maven: Agregación vs. Dependencia

Tengo proyectos jar y war (dos cada uno) que deseo agrupar. Tradicionalmente solo crearía un proyecto de oído que tiene los cuatro como dependencias.

Ahora leo sobre la agregación de poms y no estoy seguro de qué hacer más (vea http://maven.apache.org/pom.html#Aggregation). ¿Debo crear un POM agregado con los cuatro proyectos?

Creo que básicamente mi pregunta es: ¿Cuál es la gran diferencia entre un módulo y una dependencia, si la dependencia es uno de mis "propios" proyectos.

+0

la convención en SO es usar la etiqueta maven-2, a menos que te estés refiriendo a la versión 1. maven (muerta). Es una molestia, si me preguntas, pero así son las cosas. Cambió eso para ti. –

Respuesta

11

Un módulo es solo una forma de organizar las cosas.

En una compilación de varios módulos, puede construir un árbol completo de artefactos en un solo paso (recuerde el Joel Test). Sin embargo, cada uno de estos será un artefacto individual, que se puede referenciar individualmente como una dependencia.

Aquí hay un diseño de muestra, el embalaje entre paréntesis.

root (pom) 
    - project1 (jar) 
    - project2 (war) -> references project1 as dependency 
    - project3 (jar) 
    - project4 (war) -> references project3 as dependency 
    - project5 (ear) -> references project2 and project4 as dependency 

llamada mvn install en el directorio raíz de la construcción de todo el árbol.

La suposición aquí es que el proyecto1 solo lo usa el proyecto2 y el proyecto3 solo lo usa el proyecto4. De lo contrario, aquí hay un escenario más complejo.

root (pom) 
    - project1 (jar) 
    - project2 (jar) 
    - project3 (war) -> references project1 and project2 as dependency of scope provided 
    - project4 (war) -> references project1 and project2 as dependency of scope provided 
    - project5 (ear) -> references project1 through project4 as dependency 

Así, los módulos quitado el trabajo de la construcción de varios proyectos de forma independiente, pero todavía se necesita para administrar sus dependencias a sí mismo.

+2

Gracias por su respuesta! Solo para dejarlo en claro: si, en su ejemplo, no usaría un proyecto 'raíz' pero solo crearía el proyecto 5 (es decir, 'mvn install' allí), entonces no recompilaría automáticamente los proyectos 1 a 4, ¿verdad? Supongo que eso es lo que asumí falsamente y lo que me llevó a mi confusión. – apropoz

+0

exactamente. maven no funciona en ninguna parte pero debajo del directorio actual. resolverá otros artefactos del repositorio local o remoto, pero no los reconstruirá a menos que estén dentro del árbol actual. –