2011-03-02 25 views
19

Tengo EAR con una aplicación y necesito extender esta aplicación con mi propio código que está empaquetado como WAR. ¿Hay algún complemento maven que pueda ayudarme a colocar WAR dentro del EAR?Cómo agregar WAR dentro de EAR con Maven

El procedimiento manual es colocar WAR dentro de EAR y agregar el módulo a application.xml. Me gustaría automatizar eso.

EDIT: pequeña aclaración: el proyecto WAR usa maven pero para EAR solo tengo el archivo binario.

Respuesta

0

Agregue WAR como dependencia y use maven ear plugin. A continuación, utilice el objetivo ear:generate-application-xml y finalmente el objetivo ear:ear.

+0

Tal vez me falta algo, pero no veo cómo usar el complemento maven ear. El problema es que no tengo la fuente para ese EAR. – stalker

+1

si tiene un archivo EAR, puede descomprimirlo: http://maven.apache.org/plugins/maven-ear-plugin/examples/unpacking-a-module.html y luego agregar war, cambiar application.xml y empaquetarlo de nuevo. –

42

Crearía un nuevo módulo que tiene <packaging>ear</packaging>.

En las dependencias de este módulo de oreja, incluya su war módulo:

<dependency> 
    <groupId>com.your.group.id</groupId> 
    <artifactId>your-war-artifact</artifactId> 
    <version>your-war-version</version> 
    <type>war</type> 
</dependency> 

Ahora en los plugins para crear dicho módulo de oreja, incluya el experto en la oreja-plugin como, por ejemplo:

<plugin> 
    <artifactId>maven-ear-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <finalName>MyEarFile</finalName> 
     <version>5</version> 
     <generatedDescriptorLocation>${basedir}/src/main/application/META-INF</generatedDescriptorLocation> 
     <modules> 
      <webModule> 
       <groupId>com.your.group.id</groupId> 
       <artifactId>your-war-artifact</artifactId> 
       <uri>YouWarFile.war</uri> 
       <bundleFileName>YouWarFile.war</bundleFileName> 
       <contextRoot>/appname</contextRoot> 
      </webModule> 
     </modules> 
    </configuration> 
</plugin> 

Puede cambiar los valores de configuración específicos para webModule según sea necesario.

Ahora cree un módulo principal (con <packaging>pom</packaging>) y agregue el módulo war y el módulo ear al mismo. Asegúrese de configurar el <parent> de los módulos war y ear de forma automática.

Cuando ejecute mvn package para este nuevo elemento primario, el módulo war compilará un archivo war y el módulo ear lo compilará con un archivo ear (que contendrá la guerra).

+0

¿Debo agregar WAR como dependencia en EAR pom.xml? ¿Cómo sabrá la ubicación de mi WAR que está en el módulo web? – Tushar

+0

¿Lo has probado? Sí, necesita la dependencia en el módulo auricular, como se describe arriba. El complemento maven-ear-no necesita la ubicación/ruta exacta a un archivo war, porque se refiere a él como un artefacto experto (utilizando groupId y artifactId especificado en el elemento webModule). – joelittlejohn

+0

@joelittlejohn ¿Por qué tengo que declarar el artefacto 'your-war-artifact' dos veces? Una vez en la sección de dependencia y nuevamente en la sección 'webModule'? ¿Podría explicar por favor? – Geek

Cuestiones relacionadas