2011-06-24 15 views
6

Estoy usando Eclipse (Helios), con el complemento "m2eclipse". Estoy trabajando en un proyecto de aplicación web basado en Maven, que pruebo en un servidor Tomcat local que está configurado dentro de Eclipse.Eclipse + Maven + Tomcat: pruebas de aplicaciones web cuando WAR está creado con opciones personalizadas

En general, esto funciona más o menos bien. "m2eclipse" a veces puede ser escamoso ... pero en su mayor parte mantiene mi POM y mi configuración de proyecto Eclipse sincronizados, y también mantiene el código desplegado al día en Tomcat.

Sin embargo, recientemente he agregado una arruga. Tengo un archivo de inclusión de JavaScript que debe ser diferente cuando se va del entorno de prueba al entorno de producción real. Las diferencias son demasiado importantes para ser manejadas limpiamente por el filtro Maven y la sustitución de tokens. Lo que necesitaba era mantener dos archivos separados en mi proyecto, y solo implementar el apropiado para el perfil de compilación.

he logrado esto con un poco de "targetPath" engaño en mi POM Maven:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
     <webResources> 
     <resource> 
      <!-- take the stuff from a "prod" or "non-prod" subdirectory and copy it one level up --> 
      <directory>src/main/webapp/js/${profile.name}</directory> 
      <targetPath>js</targetPath> 
     </resource> 
     <resource> 
      <!-- now don't deploy those profile-specific subdirectories --> 
      <directory>src/main/webapp/js</directory> 
      <excludes> 
       <exclude>prod</exclude> 
       <exclude>non-prod</exclude> 
      </excludes> 
     </resource> 
     </webResources> 
    </configuration> 
</plugin> 

Esto genera un archivo WAR perfecta, que funciona bien cuando despliego que algún servidor Tomcat externa. Sin embargo, el problema es que Eclipse NO usa ese archivo WAR al ejecutar Tomcat dentro de Eclipse. En su lugar, Eclipse funciona con una versión en despiece de la aplicación, desplegado en un directorio críptica como esto:

<workspace>/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/MyApp 

... y al parecer los archivos de la aplicación se copian en esta tienda antes de Maven haciendo el pequeño engaño se muestra arriba. Por lo tanto, cuando se prueba localmente dentro de Eclipse, no hay JavaScript incluido presente en la ubicación esperada.

¿Hay alguna forma de solucionar este problema? ¿Tal vez un cambio de Eclipse, o un cambio de Maven, para extraer el archivo del directorio "objetivo" de Maven al directorio "wtpwebapps" de Eclipse? ¿Tal vez haya otro enfoque para resolver el problema del perfil específico-incluir-archivo por completo?

Respuesta

7

A partir de eclipse (Helios) 3.6, la opción "Dependencias del módulo Java EE" se reemplaza por la opción "Ensamblaje de despliegue". Puede configurar qué archivos para ser desplegados en el gato se ejecuta dentro de Eclipse en esta opción “Asamblea de despliegue” (Propiedades del proyecto ---> Asamblea de despliegue)

enter image description here

+0

Guau ... He estado usando Eclipse durante aproximadamente 7 años, y nunca deja de sorprenderme cuánta funcionalidad aleatoria persiste bajo la superficie que nunca he explorado. Gracias, temí que fuera necesaria una fea cirugía de Maven. –

1

usted podría desplegar en el servidor local utilizando el maven-cargo-plugin en lugar de ejecutar directamente desde Eclipse. Esto usaría tu guerra generada por maven.

Si las pruebas que está realizando se pueden automatizar, esto podría incorporarse como parte de un conjunto de pruebas de integración que Maven ejecutaría por completo.

Cuestiones relacionadas