2011-12-13 12 views
16

Tengo un proyecto Maven de varios módulos que hace uso de superposiciones WAR (pila de ellas 3 de profundidad). Todo funciona muy bien en Maven, pero no puedo lanzar mi WAR desde Eclipse porque se queja de no encontrar varios archivos.¿Cómo manejar las superposiciones de Maven WAR en Eclipse?

¿Cómo puedo configurar Eclipse (y un iniciador) para que pueda ejecutar mi WAR desde Eclipse sin tener que hacer una instalación Maven primero? Debo añadir que mis proyectos Eclipse WAR no son proyectos web dinámicos ... ¿es eso parte de lo que debo hacer?

NOTA: La siguiente pregunta toca el tema, pero la respuesta indica que siempre debe hacer primero una instalación de Maven y sé que no puede hacerlo porque hay personas que usan Eclipse sin Maven.

Maven overlays and Eclipse

También he encontrado esto que me hace pensar que no es posible a través de vainilla M2E:

http://jira.codehaus.org/browse/MNGECLIPSE-599

Respuesta

18

pude lograr esto y todo funciona muy bien. Esto es lo que debe hacer:

Antes que nada necesita el complemento M2E Eclipse que es necesario para que Eclipse reconozca y actualice automáticamente las dependencias de Maven. También proporciona un buen editor gráfico de POM. A finales de 2011, el proyecto M2Eclipse fue donado a la fundación Eclipse por Sonatype y ahora se llama simplemente M2E. Sin embargo, todavía no se envía con la edición Java EE de Eclipse Indigo y debe instalarse por separado a través de su sitio de actualización

En el pasado, la integración entre Eclipse y Maven ha sido un tanto molesto. Sin embargo, esta nueva integración basada en Eclipse de Maven es ahora consciente del hecho de que hay muchos complementos de Maven utilizados en los archivos POM y que solo ciertos objetivos de ciertos complementos tienen sentido dentro de un entorno IDE. Además, esos objetivos que tienen sentido cuando se ejecuta dentro de un IDE pueden necesitar una configuración especial. Para manejar adecuadamente este M2E ahora admite la noción de "conector"

M2E tiene una larga lista de conectores especiales que le permiten hacer lo correcto cuando invoca varios mojos (objetivos de complemento de Maven). Para ver la lista de conectores disponibles dentro de Eclipse, vaya al cuadro de diálogo Preferencias y seleccione Maven-> Dicovery-> Open Catalog. Se supone que estos conectores se instalan automáticamente cuando se detectan dentro de un archivo {{pom.xml}} durante la importación del proyecto. Sin embargo, esto requiere la versión correcta del asistente de importación M2E Maven (que Indigo no tiene hasta SR2).

Además, a veces estos conectores tienen errores y tenemos que usar los sitios de actualización nocturna o beta para obtener las últimas correcciones. Si tiene una versión anterior o defectuosa, debe eliminar y volver a importar los proyectos después de la actualización. Por estas razones, en mi opinión, todos los conectores M2E deben instalarse a mano antes de importar su proyecto a Eclipse.

El conector M2E-WTP es el que necesita para que las superposiciones WAR funcionen en los lanzadores Eclipse para Eclipse "Servers". Este conector se usa para integrar Maven con WTP ... y maneja superposiciones de WAR, configuración de contenedor de servlets, configuración de Eclipse WTP, configuración de contexto raíz y otras cosas que hacen que las herramientas web de Eclipse sean "Just Work" cuando un módulo WAR de Maven se importa a Eclipse como un proyecto.

El sitio de actualización para el conector M2e-dap es: http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/

Agregar este sitio M2e WTP e instalar el conector. Sin embargo, tenga en cuenta que ni M2E ni el conector M2E-WTP van a poner dependencias de la superposición WAR en la GUERRA final. Debe hacer esto agregando dependencias requeridas al WAR pom.xml final. No sé por qué las herramientas no hacen esto, pero no lo hacen, así que simplemente olvídalo. ;-)

En este punto, también recomendaría hacer una actualización completa a través de {{Help-> Check for Updates}}. Una vez hecho esto, debería poder simplemente agregar un servidor Eclipse, hacer clic en su proyecto (no en uno superpuesto, sino en uno normal) y elegir "Ejecutar en el servidor ...".

Los cambios realizados en WAR o en la superposición WAR se publicarán automáticamente en su servidor. Los cambios de Javascript se publican sin reiniciar el servidor ... todo lo que tiene que hacer es presionar Actualizar en el navegador para ver el nuevo código en ejecución.

Segundo informe de actualización: hay un error (https://issues.sonatype.org/browse/MECLIPSEWTP-174) en M2E que puede resultar en el directorio lib WEB-INF/perder accidentalmente todos sus archivos JAR. Cuando esto sucede, su aplicación de servlet obviamente no comenzará. La solución alternativa es limpiar el servidor haciendo clic derecho en el servidor y seleccionando "limpiar". Tenga en cuenta que limpiar el directorio de trabajo por sí solo no restaurará estos JAR faltantes.

+0

Me alegro de haber encontrado esta respuesta. Pero no funciona para mí. Intenté un caso muy simple: proyecto de guerra simple A, proyecto de guerra simple B y pom A declara la guerra B como una dependencia, pero en realidad no utiliza ninguna clase de B; en ese caso, 'mvn install' se ejecuta con éxito, con el el proyecto de superposición B se agregó a la guerra A como se esperaba. Pero si agrego en el proyecto A alguna referencia a una clase de B, veo dos problemas: (1) eclipse no puede resolver la referencia a la clase de B. (2) 'mvn install' (de eclipse o de línea de comando) falla con error de compilación en cada lugar del código A, donde me refiero a la clase de B. – rapt

+1

La instalación del conector como sugirió no resolvió estos problemas. ¿Que me estoy perdiendo aqui? – rapt

+0

"Sin embargo, tenga en cuenta que ni M2E ni el conector M2E-WTP van a poner dependencias de la superposición WAR en el WAR final". Tengo este problema exacto, ¿conoces algún otro problema? El que proporcionó no funcionará en mi caso. – Hoffmann

Cuestiones relacionadas