plugin org modules generar example create java-ee maven-2 ear maven-ear-plugin

java-ee - modules - org apache maven plugins



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

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.



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

https://github.com/StefanHeimberg/-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 arquitectura
  • 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 ------------------------------------------------------------------------


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 this . 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.


Lo que me ayudó mucho fue ejecutar el arquetipo Maven: generar objetivo 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 objetivo, 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 objetivo 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


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.


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:

<?xml version="1.0" encoding="utf-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany</groupId> <artifactId>myEar</artifactId> <packaging>ear</packaging> <name>My EAR</name> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <artifactId>maven-ear-plugin</artifactId> <configuration> <version>1.4</version> <modules> <webModule> <groupId>com.mycompany</groupId> <artifactId>myWar</artifactId> <bundleFileName>myWarNameInTheEar.war</bundleFileName> <contextRoot>/myWarConext</contextRoot> </webModule> <ejbModule> <groupId>com.mycompany</groupId> <artifactId>myEjb</artifactId> <bundleFileName>myEjbNameInTheEar.jar</bundleFileName> </ejbModule> </modules> <displayName>My Ear Name displayed in the App Server</displayName> <!-- If I want maven to generate the application.xml, set this to true --> <generateApplicationXml>true</generateApplicationXml> </configuration> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.3</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> <finalName>myEarName</finalName> </build> <!-- Define the versions of your ear components here --> <dependencies> <dependency> <groupId>com.mycompany</groupId> <artifactId>myWar</artifactId> <version>1.0-SNAPSHOT</version> <type>war</type> </dependency> <dependency> <groupId>com.mycompany</groupId> <artifactId>myEjb</artifactId> <version>1.0-SNAPSHOT</version> <type>ejb</type> </dependency> </dependencies> </project>