Parece que hay varias formas de estructurar los padres poms en una compilación multiproyecto y me pregunto si alguien tuvo alguna idea sobre cuáles son las ventajas / inconvenientes en cada sentido.
El método más simple de tener un pom padre sería ponerlo en la raíz de un proyecto, es decir
myproject/
myproject-core/
myproject-api/
myproject-app/
pom.xml
donde pom.xml es tanto el proyecto principal como describe los módulos -core -api y -app
El siguiente método es separar al padre en su propio subdirectorio como en
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
Donde el pom padre todavía contiene los módulos pero son relativos, por ejemplo ../myproject-core
Finalmente, existe la opción donde la definición del módulo y el padre se separan como en
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
pom.xml
Donde el pom padre contiene cualquier configuración "compartida" (dependencyManagement, propiedades, etc.) y myproject / pom.xml contiene la lista de módulos.
La intención es ser escalable a una construcción a gran escala, por lo que debería ser escalable a una gran cantidad de proyectos y artefactos.
Algunas preguntas extra:
- ¿Dónde es el mejor lugar para definir las diversas configuraciones compartidas como en el control de origen, directorios de implementación, complementos comunes, etc. (Asumo que es el padre pero a menudo me ha mordido esto y terminaron en cada proyecto en lugar de uno común).
- ¿Cómo lidian el complemento de lanzamiento de Maven, Hudson y Nexus con la forma en que configuran sus proyectos múltiples (posiblemente una pregunta gigante, es más si alguien ha quedado atrapado cuando se ha configurado una construcción de proyectos múltiples)?
Editar: cada uno de los subproyectos tiene su propio pom.xml, lo dejé fuera para mantenerlo conciso.