Maven2: Mejor práctica para Enterprise Project (archivo EAR)

Solo estoy cambiando de Ant a Maven y estoy tratando de descubrir la mejor práctica para configurar un proyecto EAR basado en un proyecto Enterprise.

Digamos que quiero crear un proyecto bastante estándar con un archivo jar para los EJB, un archivo WAR para el nivel web y el archivo EAR encapsulante, con los descriptores de implementación correspondientes.

¿Cómo lo haría? Cree el proyecto con archetypeArtifactId=maven-archetype-webapp como con un archivo war, y extiéndalo desde allí? ¿Cuál es la mejor estructura de proyecto (y ejemplo de archivo POM) para esto? ¿Dónde se pegan los descriptores de despliegue relacionados con el archivo ear, etc.?

Gracias por cualquier ayuda.

    Usted crea un nuevo proyecto. El nuevo proyecto es su proyecto de ensamblaje EAR que contiene sus dos dependencias para su proyecto EJB y su proyecto WAR.

    Entonces, en realidad tienes tres proyectos maven aquí. Un EJB. Una GUERRA. Un EAR que junta las dos partes y crea el oído.

    Los descriptores de despliegue pueden ser generados por maven o colocados dentro del directorio de recursos en la estructura del proyecto EAR.

    El plugin maven-ear-plugin es lo que utilizas para configurarlo, y la documentación es buena, pero no está del todo clara si todavía estás averiguando cómo funciona el maven en general.

    Por ejemplo, podrías hacer algo como esto:

       4.0.0 com.mycompany myEar ear My EAR    maven-compiler-plugin  1.5 1.5 UTF-8    maven-ear-plugin  1.4   com.mycompany myWar myWarNameInTheEar.war /myWarConext   com.mycompany myEjb myEjbNameInTheEar.jar   My Ear Name displayed in the App Server  true    maven-resources-plugin 2.3  UTF-8    myEarName     com.mycompany myWar 1.0-SNAPSHOT war   com.mycompany myEjb 1.0-SNAPSHOT ejb    

    Lo que me ayudó mucho fue ejecutar el arquetipo Maven: generar objective y seleccionar uno de los arquetipos, algunos de los cuales parecen actualizarse regularmente (en particular, JBoss parece estar bien mantenido).

     mvn archetype:generate 

    Cientos de arquetipos aparecieron en una lista numerada para seleccionar (¡519 a partir de ahora!). El objective, todavía en ejecución, me llevó a hacer una selección ingresando un número o ingresando una cadena de búsqueda, por ejemplo:

     513: remote -> org.xwiki.commons:xwiki-commons-component-archetype 514: remote -> org.xwiki.rendering:xwiki-rendering-archetype-macro 515: remote -> org.zkoss:zk-archetype-component 516: remote -> org.zkoss:zk-archetype-webapp 517: remote -> ru.circumflex:circumflex-archetype (-) 518: remote -> se.vgregion.javg.maven.archetypes:javg-minimal-archetype (-) Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 

    Ingresé la cadena de búsqueda “ear”, que redujo la lista a solo 8 elementos (a partir de hoy):

     Choose archetype: 1: remote -> org.codehaus.mojo.archetypes:ear-j2ee14 (-) 2: remote -> org.codehaus.mojo.archetypes:ear-javaee6 (-) 3: remote -> org.codehaus.mojo.archetypes:ear-jee5 (-) 4: remote -> org.hibernate:hibernate-search-quickstart (-) 5: remote -> org.jboss.spec.archetypes:jboss-javaee6-ear-webapp 6: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp-ear-archetype 7: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp-ear-archetype-blank 8: remote -> org.ow2.weblab.tools.maven:weblab-archetype-searcher 

    Seleccioné “org.jboss.spec.archetypes: jboss-javaee6-ear-webapp” (ingresando la selección “5” en este ejemplo).

    A continuación, el objective me pidió que ingresara groupId, artifactId, nombres de paquetes, etc., y luego generó la siguiente aplicación de ejemplo bien documentada:

     [pgarner@localhost Foo]$ tree . |-- Foo-ear | `-- pom.xml |-- Foo-ejb | |-- pom.xml | `-- src | |-- main | | |-- java | | | `-- com | | | `-- foo | | | |-- controller | | | | `-- MemberRegistration.java | | | |-- data | | | | `-- MemberListProducer.java | | | |-- model | | | | `-- Member.java | | | `-- util | | | `-- Resources.java | | `-- resources | | |-- import.sql | | `-- META-INF | | |-- beans.xml | | `-- persistence.xml | `-- test | |-- java | | `-- com | | `-- foo | | `-- test | | `-- MemberRegistrationTest.java | `-- resources |-- Foo-web | |-- pom.xml | `-- src | `-- main | |-- java | | `-- com | | `-- foo | | `-- rest | | |-- JaxRsActivator.java | | `-- MemberResourceRESTService.java | `-- webapp | |-- index.html | |-- index.xhtml | |-- resources | | |-- css | | | `-- screen.css | | `-- gfx | | |-- banner.png | | `-- logo.png | `-- WEB-INF | |-- beans.xml | |-- faces-config.xml | `-- templates | `-- default.xhtml |-- pom.xml `-- README.md 32 directories, 23 files 

    Después de leer los cuatro archivos POM, que fueron bien comentados, tenía prácticamente toda la información que necesitaba.

     ./pom.xml ./Foo-ear/pom.xml ./Foo-ejb/pom.xml ./Foo-web/pom.xml 

    He creado un repository de github para mostrar lo que creo que es una buena (o mejores prácticas) estructura de proyecto de inicio …

    https://github.com/StefanHeimberg/stackoverflow-1134894

    algunas palabras clave:

    • Maven 3
    • BOM (DependencyManagement of own dependencies)
    • Parent para todos los proyectos (DependencyManagement de dependencias externas y PluginManagement para la configuración global del proyecto)
    • JUnit / Mockito / DBUnit
    • Proyecto Clean War sin WEB-INF / lib porque las dependencias están en la carpeta EAR / lib.
    • Proyecto Clean Ear.
    • Descripciones mínimas de implementación para Java EE7
    • No hay interfaz EJB local porque @LocalBean es suficiente.
    • Configuración maven mínima a través de propiedades de usuario maven
    • Descriptores de implementación reales para Servlet 3.1 / EJB 3.2 / JPA 2.1
    • uso de macker-maven-plugin para verificar las reglas de la architecture
    • Pruebas de integración habilitadas, pero omitidas. (skipITs = false) útil para habilitar en CI Build Server

    Salida Maven:

     Reactor Summary: MyProject - BOM .................................... SUCCESS [ 0.494 s] MyProject - Parent ................................. SUCCESS [ 0.330 s] MyProject - Common ................................. SUCCESS [ 3.498 s] MyProject - Persistence ............................ SUCCESS [ 1.045 s] MyProject - Business ............................... SUCCESS [ 1.233 s] MyProject - Web .................................... SUCCESS [ 1.330 s] MyProject - Application ............................ SUCCESS [ 0.679 s] ------------------------------------------------------------------------ BUILD SUCCESS ------------------------------------------------------------------------ Total time: 8.817 s Finished at: 2015-01-27T00:51:59+01:00 Final Memory: 24M/207M ------------------------------------------------------------------------ 

    NetBeans IDE define automáticamente la estructura que es casi similar a la sugerida por Patrick Garner. Para los usuarios de NetBeans

    Archivo -> Nuevo proyecto -> En el lado izquierdo, seleccione Maven y en el lado derecho seleccione Maven Enterprise Application y presione Siguiente -> Solicita los nombres de los proyectos para war, ejb y settings.

    El IDE creará automáticamente la estructura para usted.

    He estado buscando alto y bajo para obtener un ejemplo completo de una aplicación empaquetada para el oído basada en Maven y finalmente tropecé con esto . Las instrucciones dicen que seleccione la opción 2 cuando se ejecuta a través de la CLI, pero para su propósito, use la opción 1.

    Este es un buen ejemplo de la parte maven-ear-plugin .

    También puede verificar los arquetipos maven que están disponibles como ejemplo. Si solo enmascara mi arquetipo: generar obtendrá una lista de arquetipos disponibles. Uno de ellos es

     maven-archetype-j2ee-simple