2012-05-02 13 views
6

Tengo un artefacto de guerra y necesito usar algunas de sus clases de un contenedor. no me puedo mover las clases a otro proyecto, a continuación, despliego las clases y recursos que incluyo en mi aplicación web como un artefacto "adjunto" utilizando la siguiente configuración:Error de Dependencia de Maven en Eclipse

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
     <attachClasses>true</attachClasses> 
    </configuration> 
</plugin> 

Esto dará lugar a dos artefactos desplegados: mywebapp-1.0-SNAPSHOT.war y mywebapp-1.0-SNAPSHOT-classes.jar.

usar esas clases que hacer referencia al artefacto de la siguiente manera:

<dependency> 
     <groupId>mygroup</groupId> 
     <artifactId>mywebapp</artifactId> 
     <version>${project.version}</version> 
     <classifier>classes</classifier> 
    </dependency> 

Cuando compilado a partir de Jenkins todo funciona correctamente, pero cuando corro las pruebas localmente desde Eclipse no puede encontrar las clases de referencia. (java.lang.NoClassDefFoundError)

Creo que podría ser un error en el plugin maven eclipse, alguien tiene alguna idea de que puede estar pasando?

Respuesta

4

Mi respuesta simple es el siguiente enlace para el sistema de seguimiento de errores de Eclipse:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=365419

ver las respuestas en su interior.

Sí, es un problema en sí Eclipse ..

La solución dentro de Eclipse sólo tiene que añadir manualmente el proyecto dentro de su espacio de trabajo para el proyecto apropiado cuando usted necesita las clases de su proyecto de guerra.

+0

Además molesta necesidad de tocar el violín de forma manual con la configuración del proyecto, inconveniente adicional es que las clases y los recursos de los proyectos dependientes se cuela en los resultados de búsqueda, por lo que en lugar de abrir la fuente de la clase referenciada que a menudo terminan en vista de archivos de clase desordenada o la versión desmontada de su propia clase tiene fuentes disponibles perfectamente :( Nota: las clases tienen resultados a pesar de que están correctamente marcadas como recursos 'derivados', me parece un error, verificado en Eclipse Mars SR1. – Espinosa

5

solución se describe en http://wiki.eclipse.org/M2E-WTP_FAQ:

Existe una solución alternativa, sin embargo, tenemos que cambiar la dependencia de si el proyecto se construye en Eclipse o no. En su proyecto depende, puede configurar lo siguiente:

<dependencies> 
... 
<dependency> 
    <groupId>com.company</groupId> 
    <artifactId>mywebapp</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <classifier>${webClassifier}</classifier> 
</dependency> 
... 
</dependencies> 
... 
<properties> 
... 
<webClassifier>classes</webClassifier> 
</properties> 
... 
<profiles> 
<profile> 
    <id>m2e</id> 
    <activation> 
    <property> 
     <name>m2e.version</name> 
    </property> 
    </activation> 
    <properties> 
    <webClassifier></webClassifier> 
    </properties> 
</profile> 
</profiles> 

El perfil M2e se activa automáticamente cuando el proyecto se construye con M2e, ignorado en otras circunstancias. Solo en ese caso, el proyecto dependiente usará un clasificador vacío para hacer referencia al proyecto web, que se agregará al classpath como se esperaba.

+1

Puedo confirmar que resuelve el problema con resolución de espacio de trabajo para dependencias con clasificador; por lo general, proyectos de guerra con attachClasses = true. Sin embargo, el inconveniente es que ahora las versiones entre referencia de dependencia y proyecto referenciado * deben coincidir perfectamente *, de lo contrario se informa instantáneamente como dependencia interrumpida dency. En términos prácticos, significa un montón más de chequeos git. – Espinosa

Cuestiones relacionadas