Proyectos multi-módulos: ¿cuáles son sus beneficios?
Resuelto
Programmeranonyme343
-
KX Mensajes publicados 19031 Estado Moderador -
KX Mensajes publicados 19031 Estado Moderador -
Hola,
Me interesa Maven, he aprendido que se pueden tener proyectos que contengan varios módulos, pero me gustaría saber cuál es la utilidad de tener varios. ¿Por qué no crear simplemente varios paquetes para cada parte de la aplicación?
Gracias de antemano por tu respuesta,
Programmeranoche343
Me interesa Maven, he aprendido que se pueden tener proyectos que contengan varios módulos, pero me gustaría saber cuál es la utilidad de tener varios. ¿Por qué no crear simplemente varios paquetes para cada parte de la aplicación?
Gracias de antemano por tu respuesta,
Programmeranoche343
1 respuesta
Hola,
Con Maven, cada entregable debe tener su módulo.
Por ejemplo, si haces una aplicación cliente/servidor, por ejemplo, el cliente deberá estar en un módulo, el servidor en otro. En general, en este caso se hará un tercer módulo que será utilizado tanto por el cliente como por el servidor.
Para prolongar el ejemplo, se puede imaginar que en lugar de tener un cliente, podrías tener varios: un cliente ligero (HTML, JS...), un cliente de escritorio (Swing, Java FX), un cliente móvil, etc. Cada entregable diferente estará en un módulo dedicado.
En cuanto al servidor, si se respeta la arquitectura multi-capa de JEE se podría aislar cada capa en un módulo Maven dedicado.
Estas separaciones tienen sentido, entre otras cosas, con respecto a las dependencias de cada módulo. Por ejemplo, Hibernate será útil para la capa DAO y JAX-RS para la capa de web-service, pero no al revés.
En el marco de un gran proyecto con varios desarrolladores de distintos niveles, la estructura de Maven permite asegurarse de que el código permanezca limpio. Imposible, por ejemplo, hacer una consulta a la base de datos en medio de un código web-service si has aislado los DAO en otro módulo.
Un artículo que podría interesarte:
https://forums.commentcamarche.net/forum/affich-37598446-implementation-d-une-architecture-multi-tiers-avec-spring
En este ejemplo de código hay una descomposición de la aplicación servidor en 9 módulos (es un poco extremo, pero puede justificarse)
Dicho esto, si en tu aplicación solo tienes un entregable que hacer, puedes limitarte a un solo módulo. Maven es una herramienta muy poderosa que se adapta a todo tipo de proyectos Java, incluyendo los más simples.
--
La confianza no excluye el control
Con Maven, cada entregable debe tener su módulo.
Por ejemplo, si haces una aplicación cliente/servidor, por ejemplo, el cliente deberá estar en un módulo, el servidor en otro. En general, en este caso se hará un tercer módulo que será utilizado tanto por el cliente como por el servidor.
Para prolongar el ejemplo, se puede imaginar que en lugar de tener un cliente, podrías tener varios: un cliente ligero (HTML, JS...), un cliente de escritorio (Swing, Java FX), un cliente móvil, etc. Cada entregable diferente estará en un módulo dedicado.
En cuanto al servidor, si se respeta la arquitectura multi-capa de JEE se podría aislar cada capa en un módulo Maven dedicado.
Estas separaciones tienen sentido, entre otras cosas, con respecto a las dependencias de cada módulo. Por ejemplo, Hibernate será útil para la capa DAO y JAX-RS para la capa de web-service, pero no al revés.
En el marco de un gran proyecto con varios desarrolladores de distintos niveles, la estructura de Maven permite asegurarse de que el código permanezca limpio. Imposible, por ejemplo, hacer una consulta a la base de datos en medio de un código web-service si has aislado los DAO en otro módulo.
Un artículo que podría interesarte:
https://forums.commentcamarche.net/forum/affich-37598446-implementation-d-une-architecture-multi-tiers-avec-spring
En este ejemplo de código hay una descomposición de la aplicación servidor en 9 módulos (es un poco extremo, pero puede justificarse)
Dicho esto, si en tu aplicación solo tienes un entregable que hacer, puedes limitarte a un solo módulo. Maven es una herramienta muy poderosa que se adapta a todo tipo de proyectos Java, incluyendo los más simples.
--
La confianza no excluye el control
Entonces, si hacemos un proyecto Maven multi-m módulo, ¿los que no dependen de ningún otro módulo estarán en un archivo cada uno y los que dependen entre sí estarán en un único archivo?
Y si por ejemplo el móduloA depende de móduloB ,
pero el móduloC también depende de móduloB, ¿habrá dos archivos con un móduloA+móduloB y el otro móduloC+móduloB?
Si A debe depender de B, entonces en el pom.xml de A hay que añadir una dependencia hacia B.
Cuando Maven vaya a construir el proyecto, primero compilará B, y luego lo utilizará para compilar A.
Idem si C debe depender de B, basta con configurarlo en el pom.xml de C
Nota: en ningún momento es necesario configurar el pom.xml de B para indicar que será utilizado por A o C.
Para empezar podrías mirar este artículo:
https://forums.commentcamarche.net/forum/affich-37593827-debuter-avec-maven
Observación: si tienes varios módulos puedes hacer varias main, una por entrega. Pero un módulo no está obligado a tener un método main; es incluso bastante frecuente no tenerlo.