2012-08-30 12 views
5

Recibo un error de compilación cuando compilo usando maven pero funciona en eclipse. Ambos están utilizando el mismo JDK:Error de compilación de maven erróneo (funciona en eclipse)

java -version 
java version "1.6.0_35" 
Java(TM) SE Runtime Environment (build 1.6.0_35-b10) 
Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01, mixed mode) 

mvn -version 
Apache Maven 3.0.4 
Maven home: /usr/share/maven 
Java version: 1.6.0_35, vendor: Sun Microsystems Inc. 
Java home: /usr/lib/jvm/jdk1.6.0_35/jre 
Default locale: es_ES, platform encoding: UTF-8 
OS name: "linux", version: "3.2.0-29-generic", arch: "amd64", family: "unix" 

Este es el error:

[ERROR] /blablabla.../myClass.java: [78,107] inconvertible types 
[ERROR] found : java.util.Collection<java.lang.Object> 
[ERROR] required: java.util.Collection<? extends org.springframework.integration.store.MessageGroup> 
[ERROR] -> [Help 1] 

Y este es el código (sin error de compilación en Eclipse):

Collection<? extends MessageGroup> collection = (Collection<? extends MessageGroup>) this.groupMap.values(); 

sé que este es un tema muy recurrente, he encontrado algunas publicaciones que me preguntan lo mismo, pero parece que nadie tiene una solución estándar. Algunas personas dicen que funciona con diferentes versiones de JDK. He probado con 1.6.0_30, 1.6.0_31, 1.6.0_32 y 1.6.0_35 y todos fallan.

¿Alguna idea?

Gracias

+0

¿Está configurando la versión de origen y de destino del complemento del compilador? Ver http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html – beny23

+1

Sí -> 1,6 1,6 Curro

+1

Eclipse no utiliza el compilador del JDK. ¡Solo necesita la referencia al JDK para las bibliotecas! Por lo tanto, es muy posible que el compilador Maven acepte algún código, mientras que el compilador JDK (que Maven utiliza de forma predeterminada) no lo hace. Y la mayoría de las veces cuando vi que esos dos divergían, el compilador de Eclipse era el que se ajustaba al estándar. –

Respuesta

14

Sospecho Eclipse no está utilizando el JDK que creo que es. Intenta usar tipo borrado.

Collection<? extends MessageGroup> collection = 
     (Collection<? extends MessageGroup>) 
       (Collection) this.groupMap.values(); 
+0

Comprobado doblemente JRE instalado y ruta de compilación en eclipse ... como se espera es el mismo (1.6.0_35). De todos modos ... tipo borrado funciona !!! ¡¡Muchas gracias!! – Curro

+0

Conocí borrado de tipo como un concepto durante la compilación, pero no como una técnica de codificación explícita. Gracias por la respuesta, es lo que necesitaba también. –

Cuestiones relacionadas