Donde estoy trabajando, estamos usando Maven 2 y tenemos un arquetipo bastante bueno para nuestros proyectos. El objetivo era obtener una buena separación de preocupaciones, así definimos una estructura de proyecto usando múltiples módulos (uno para cada aplicación 'capa'): - común: código común utilizado por las otras capas (p. Ej., I18n) - entidades: las entidades de dominio - repositorios: este módulo contiene las interfaces daos e implementaciones - services-intf: interfaces para los servicios (p. ej., UserService, ...) - servicios de impl: implementaciones de los servicios (por ejemplo, UserServiceImpl) - web: todo lo relacionado con el contenido de la web (por ejemplo, CSS, JSP, páginas JSF, ...) - ws: servicios web
Cada el módulo tiene sus propias dependencias (p. ej., los repositorios pueden tener jpa) y algunos son de todo el proyecto (por lo tanto, pertenecen al módulo común). Las dependencias entre los diferentes módulos de proyecto separan claramente las cosas (por ejemplo, la capa web depende de la capa de servicio pero no conoce la capa de repositorio).
Cada módulo tiene su propio paquete de base, por ejemplo, si el paquete de la aplicación es "com.foo.bar", entonces tenemos:
com.foo.bar.common
com.foo.bar.entities
com.foo.bar.repositories
com.foo.bar.services
com.foo.bar.services.impl
...
Cada módulo respeta la estructura estándar de proyecto Maven:
src\
..main\java
...\resources
..test\java
...\resources
Las pruebas unitarias para una capa determinada encuentran fácilmente su lugar en \ src \ test ... Todo lo que es específico del dominio tiene su lugar en el módulo de entidades. Ahora, algo así como una FileStorageStrategy debería entrar en el módulo de repositorios, ya que no necesitamos saber exactamente cuál es la implementación. En la capa de servicios, solo conocemos la interfaz del repositorio, no nos importa cuál es la implementación específica (separación de preocupaciones).
hay múltiples ventajas de este enfoque:
- clara separación de las preocupaciones
- cada módulo es empaquetable como un frasco (o una guerra en el caso del módulo web) y por lo tanto permite un código más fácil Reciclar (por ejemplo, podríamos instalar el módulo en el repositorio de Maven y reutilizarla en otro proyecto)
- máxima independencia de cada parte del proyecto
sé que esto hace No respondo todas sus preguntas, pero creo que esto podría ponerlo en el camino correcto y podría ser útil para otros.
Obviamente no hay una respuesta definitiva, pero después de usar maven2 durante un tiempo, llegué a aplicar la estructura dada, y por lo tanto, declaro que la respuesta maven es la misma. (Eso no significa que los otros estén equivocados, ni nada) Me acabo de dar cuenta de lo fácil que es no tener que pensar en las etapas iniciales de tu compilación, simplemente dejas caer tus fuentes y recursos en esos directorios y compila sin crear archivos ant y cosas así. – Mauli