2012-02-10 11 views
5

Consideremos el ejemplo de capas después de la aplicación de la empresa:Consejos para crear la estructura del proyecto Maven - ¿Módulos múltiples frente a proyectos múltiples?

  1. proyecto de servicios -> capa de servicios POJO
  2. proyecto en la Web -> aplicación web, depende 'de proyectos de servicios', desplegados como una guerra
  3. proyecto-web-services -> servicios web, depende 'de proyectos de servicios', desplegados como una guerra por separado, no están expuestos actualmente a través de Internet
  4. proyecto independiente -> Tareas programadas, depende 'de proyectos de servicios'

¿Cuál sería el enfoque correcto para organizar esto en Maven. ¿Debería crear un proyecto maven de múltiples módulos? si 'project-services' es un módulo Maven, ¿puede compartirse con otros tres proyectos, cada uno de los cuales es una unidad desplegable independiente?

En mis proyectos anteriores simplemente he creado 4 proyectos diferentes de Maven y nunca sentí la necesidad de otra cosa.

Quiero confirmar si hay una mejor manera de lo que he estado haciendo anteriormente.

Respuesta

2

En realidad, puede hacer cualquier enfoque. Si realmente es un gran proyecto, que siempre desea construir y lanzar al mismo tiempo, un proyecto de varios módulos es una buena opción. Se podría configurarlo como esto probablemente:

pom project (top level project that would define all of the modules) 
    jar project (project-services) 
    war project (project-web) 
    war project (project-web-services) 
    project-standalone (wasn't sure if this was a jar, or just some scripts, etc) 

Por lo que sólo construiría y la liberación de la raíz del proyecto, y que tomaría el cuidado de todos los submódulos para usted. Cada uno puede tener dependencias entre sí (solo tenga cuidado con las dependencias circulares). Y casi estarías listo para ir.

La otra opción son los artefactos por separado. El beneficio allí es un ciclo de lanzamiento diferente. Es una buena opción para cuando tienes una biblioteca de jar que no cambia a menudo, pero actualizas la guerra con frecuencia.

Y, obviamente, podría tener una mezcla, por lo que tal vez el contenedor sea independiente, pero tiene un proyecto de varios módulos que contiene los dos archivos de guerra. El beneficio de maven es que es lo suficientemente flexible como para manejar cualquier caso comercial que tenga sobre cómo se deben dividir.

0

Sin duda iría con un único proyecto con para módulos para asegurar que coincidan las versiones usadas de las bibliotecas comunes de terceros.

Tener un proyecto POM como raíz y tener todas las implementaciones y otros artefactos compartidos generalmente se considera una buena práctica para todo menos para proyectos de un solo módulo.

1

En mi lugar de trabajo tenemos muchos proyectos de primer nivel que comparten bibliotecas (15 proyectos de nivel superior comparten aproximadamente 35 bibliotecas). Fuimos con el proyecto único por enfoque de biblioteca. Hoy, cuando tenemos que liberarlos a todos de una vez, es una pesadilla.

Algunos de los problemas que enfrentamos:

  • calcular manualmente las dependencias
  • tiene que ejecutar la liberación en el orden correcto
  • Un fallo se detiene el comunicado de

Si tuviera que d todo de nuevo (ayudé a configurar todo esto), utilizaría un solo proyecto de varios módulos. Si nada más, liberar todo de una vez es una gran ventaja. Los proyectos pueden no verse muy bien en eclipse, pero eso no es lo que debería estar buscando de todos modos.

+0

La desventaja de un gran proyecto es que a menudo liberas artefactos que no tuvieron ningún cambio. Entiendo el problema del lanzamiento, tal vez en tu caso cambies cada artefacto cada vez que lo liberes ... en cuyo caso es menos complicado. Pero a veces, cuando solo necesitas liberar un artefacto, liberarlos a todos sin cambios es menos que ideal. – Michael

0

Como tiene algunas dependencias directas entre los módulos, también recomendaría el proyecto de varios módulos.

Lo que a menudo recomiendo es considerar el ciclo de vida de los módulos. Por ejemplo: si liberara el módulo de lote mucho más a menudo que la capa de servicio, podría tener sentido dividirlo. Por lo tanto, no necesita liberar (implementar) cosas que no tuvieron cambios. Dado que el lote por lo general no se implementa de la misma manera que los archivos .war. Pero eso depende del ciclo de vida de los módulos service + batch.

En la mayoría de los casos, el movimiento uno al lado del otro. Entonces +1 para "uno para todos"

Cuestiones relacionadas