2010-04-26 16 views
9

Utilizo el objetivo eclipse:eclipse para generar un entorno de proyecto Eclipse. La implementación funciona bien. El objetivo crea las entradas var classpath para todas las dependencias necesarias.La aplicación web Maven con maven-eclipse-plugin no genera <dependent-module>

Con m2eclipse estaba el Contenedor Maven que define una carpeta de exportación que era WEB-INF/lib para mí. Pero no quiero confiar en m2eclipse, así que ya no lo uso.

las entradas de ruta de clase que son generados por eclipse:eclipse meta no tienen una carpeta dicha exportación.

Al iniciar el contenedor de servlets con WTP, publica todos los recursos y clases, excepto las bibliotecas, en el contexto.

¿Qué le falta publicar las librerías necesarias, o eso no es posible sin la integración de m2eclipse?

Enviroment

  • Eclipse 3.5 Java EE Galileo
  • Apache Maven 2.2.1 (r801777; 2009-08-06 21: 16: 01 + 0200)
  • versión Java: 1,6. 0_14
  • m2eclipse

La configuración de Maven en Eclipse-plugin

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-eclipse-plugin</artifactId> 
    <version>2.8</version> 
    <configuration> 
     <projectNameTemplate>someproject-[artifactId]</projectNameTemplate> 
     <useProjectReferences>false</useProjectReferences> 
     <downloadSources>false</downloadSources> 
     <downloadJavadocs>false</downloadJavadocs> 

     <wtpmanifest>true</wtpmanifest> 
     <wtpversion>2.0</wtpversion> 
     <wtpapplicationxml>true</wtpapplicationxml> 
     <wtpContextName>someproject-[artifactId]</wtpContextName> 

     <additionalProjectFacets> 
     <jst.web>2.3</jst.web> 
     </additionalProjectFacets> 
    </configuration> 
    </plugin> 

Los archivos generados

después de ejecutar el objetivo eclipse:eclipse, el módulo depende no aparece en mi generada .settings/org.eclipse.wst.common.component, etc. arranque del servidor Echo de menos el deposiciones.

Esto es lo que sale:

<?xml version="1.0" encoding="UTF-8"?> 
<project-modules id="moduleCoreId" project-version="1.5.0"> 
    <wb-module deploy-name="someproject-core"> 
    <wb-resource deploy-path="/" source-path="src/main/java"/> 
    <wb-resource deploy-path="/" source-path="src/main/webapp"/> 
    <wb-resource deploy-path="/" source-path="src/main/resources"/> 
    </wb-module> 
</project-modules> 

Actualización para los próximos lectores

El problema aquí era el desviado packaging de tipo, si el uso u maven-eclipse-plugin favor validar el uso de <packaging>war</packaging> o ear.

Los siguientes problemas están marcados de las situaciones en las que tengo dos ciclos de vida de compilación en un maven pom.

+1

¿Estás seguro de que el 'experto en Eclipse-Plugin' está configurado correctamente en el proyecto en el que correr' Eclipse:? Eclipse' ¿Por qué se obtiene un 'proyecto-version = "1.5.0"' ? Esto es raro, esto no refleja la configuración. –

+0

Es exactamente lo que pegué, muy extraño. Puedo eliminar los archivos 'eclipse' y ejecutar' eclipse: eclipse' de nuevo, produce el mismo resultado. – codevour

+1

Puedo ' Reproduzca el problema. ¿Puede publicar todo su pom? (tal vez en http://pastie.org si es demasiado grande). –

Respuesta

4

¿Qué le falta publicar las librerías necesarias, o eso no es posible sin la integración de m2eclipse?

No estoy seguro de entender el problema. He usado el maven-eclipse-plugin con maven webapps durante mucho tiempo con éxito. Entonces, ¿funciona o no la implementación en un servidor? ¿La aplicación es utilizable o no?¿Puedes aclarar?

Por si acaso, hice una prueba rápida en una aplicación web recién creada con la configuración de su complemento que se ve bien. Me acaba de quitar la faceta jst.java y configurado el maven-compiler-plugin lugar:

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
    <target>1.5</target> 
    <source>1.5</source> 
    </configuration> 
</plugin> 

Y añadí una dependencia de log4j. Entonces, cuando corro mvn eclipse:eclipse, esto es lo que me pasa en el .settings/org.eclipse.wst.common.component generada:

<project-modules id="moduleCoreId" project-version="2.0"> 
    <wb-module deploy-name="example-mvn-Q2713648"> 
    <property name="context-root" value="example-mvn-[artifactId]"/> 
    <wb-resource deploy-path="/" source-path="src/main/webapp"/> 
    <property name="java-output-path" value="/target/classes"/> 
    <dependent-module archiveName="log4j-1.2.14.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"> 
     <dependency-type>uses</dependency-type> 
    </dependent-module> 
    <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/> 
    </wb-module> 
</project-modules> 

La dependencia log4j está ahí y se publica. ¿Qué me perdí?


Actualización: Pegué el pom proporcionado en mi proyecto war, lo cambió a utilizar la versión 2.8 del plugin para Eclipse y se retira src/main/webapp del elemento resources (que no es un recurso) y esto es lo que yo obtener cuando se ejecuta mvn eclipse:eclipse:

<project-modules id="moduleCoreId" project-version="2.0"> 
    <wb-module deploy-name="example-mvn-Q2713648"> 
    <property name="context-root" value="example-mvn-[artifactId]"/> 
    <wb-resource deploy-path="/" source-path="src/main/webapp"/> 
    <property name="java-output-path" value="/target/classes"/> 
    <dependent-module archiveName="hsqldb-1.8.0.10.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/hsqldb/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar"> 
     <dependency-type>uses</dependency-type> 
    </dependent-module> 
    <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/> 
    <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/> 
    </wb-module> 
</project-modules> 

se ve bien para mí.

Actualización 2: Como he escrito en un comentario en su propia respuesta, no creo que el plug-in de Eclipse generará un módulo web dinámico para un proyecto con un embalaje de tipo jar. Si cambia el paquete war, debe comportarse como se espera. Estoy bastante seguro de que esta es la causa de tus problemas.

+0

Gracias por su respuesta, esto me ayuda para lo que tengo que esperar. Pero ajusté mi pregunta, desafortunadamente no obtuve estas cosas ' ', ¿tal vez algo más está haciendo mal? – codevour

+0

Agregué el ejemplo de mi proyecto en una respuesta adicional, solo para avisarle. – codevour

+0

Sí, descubrimos el problema. Como cambié 'jar' a' war' genera '' dependent-module> '. Para mí no se implementa de manera consistente, ¿por qué el 'maven-eclipse-plugin' se preocupa por la definición del paquete? ... Awwww eso es tan malo, porque necesito las capacidades de 'webapp' y' war-packaging' pero mi artefacto tiene que ser un 'jar'. Desafortunadamente no tengo ideas ... ¿tienes una más? :) – codevour

0

El example pom (on pastie.org)

He quitado ~ 60 dependencias de la original pom.xml al lado de esta nada cambió. Sólo tienes que crear el webapp-archetype y pegar el pom en el generada (por el comando arquetipo)

mvn archetype:create 
    -DgroupId=example 
    -DartifactId=mvn 
    -DarchetypeArtifactId=maven-archetype-webapp 

Después de este eclipse:eclipse conduce a la .settings/org.eclipse.wst.common.component generada, que ahora muestra project-version="2.0" (después de que hiciera varios cambios de 1,0 a 1,5 y 2.0) pero aún falta el <dependent-module>.

<project-modules id="moduleCoreId" project-version="2.0"> 
    <wb-module deploy-name="example-mvn-mvn"> 
    <wb-resource deploy-path="/" source-path="src/main/webapp"/> 
    <wb-resource deploy-path="/" source-path="src/main/resources"/> 
    </wb-module> 
</project-modules> 

actualización (@Pascal Thivent): Este es un buen punto. Nuestro proyecto (un web-framework) tiene de hecho dos características mixtas. No es el jar-packaging que se utiliza para proporcionar las capacidades marco, durante la ejecución que se expande a la aplicación de web-estructura (WEB-INF/...)

Pero también debería ser posible ejecutar el marco con sus extensiones en un mismo contenedor de servlets, por lo que podemos desarrolle la funcionalidad básica sin empaquetarla como jar y úsela con un proyecto personalizado. Entonces, el jar es correcto aquí.


Actualización 2

El source code (EclipseWtpComponentWriter) del maven-eclipse-plugin muestra que esto es codificado y no hay manera de encontrarse con el entonces cláusula de excepción establecer el packaging-war, o me he perdido algo? :(

private void writeModuleTypeComponent(XMLWriter writer, String packaging, 
       File buildOutputDirectory, EclipseSourceDir[] sourceDirs, 
       ArtifactRepository localRepository) 
{ 
    if (Constants.PROJECT_PACKAGING_WAR.equalsIgnoreCase(packaging)) 
    { 
     // Adding the <dependent-modules> stuff 
    } 
} 
+0

Oh, eliminaste tu comentario, de todos modos, agregué una explicación para el 'tarro de empaquetado'. – codevour

+2

Sí, lo eliminé porque pensé que esperabas que pegara el contenido de tu pom en un proyecto de guerra. Pero ahora que volvió a leer su pregunta, creo que encontramos el problema: no creo que el plugin eclipse genere un módulo web dinámico para un proyecto con un paquete de tipo 'jar'. Si lo cambia a 'guerra', debería comportarse como se espera. –

Cuestiones relacionadas