2012-08-30 6 views
5

Ich erhalte einen Kompilierungsfehler, wenn ich mit Maven kompiliere, aber in Eclipse funktioniert. Beide sind mit dem gleichen JDK:Falscher Maven-Kompilierungsfehler (funktioniert in 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" 

Dies ist der Fehler:

[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] 

Und dies ist der Code (kein Übersetzungsfehler in Eclipse):

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

Ich weiß, dass diese ist ein ziemlich rekursives Problem, ich habe ein paar Posts gefunden, die dasselbe fragen, aber es scheint, dass niemand eine Standar-Lösung hat. Manche Leute sagen, dass es mit verschiedenen JDK-Versionen funktioniert. Ich habe mit 1.6.0_30, 1.6.0_31, 1.6.0_32 und 1.6.0_35 getestet und alle scheitern.

Irgendeine Idee?

Dank

+0

Setzen Sie die Quell- und Zielversion des Compiler-Plugins? Siehe http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html – beny23

+1

Ja -> 1,6 1,6 Curro

+1

Eclipse-nicht die Verwendung Compiler aus dem JDK. Es benötigt nur den Verweis auf das JDK für die Bibliotheken! Es ist also durchaus möglich, dass der Maven-Compiler etwas Code akzeptiert, während der JDK-Compiler (den Maven standardmäßig verwendet) dies nicht tut. Und meistens, als ich sah, dass diese beiden auseinander gingen, war der Eclipse-Compiler der standardkonforme. –

Antwort

14

ich eclipse vermuten das JDK nicht verwendet Sie denken, es ist. Versuchen Sie es mit der Art Löschen.

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

Doppelt überprüfte installierte JRE und Build-Pfad in Eclipse ... wie erwartet ist das gleiche (1.6.0_35). Anyway .... Art Löschen funktioniert !!! Danke vielmals!! – Curro

+0

Ich wusste über Type Erase als ein Konzept während der Kompilierung, aber nicht als eine explizite Codierungstechnik. Danke für die Antwort, es ist was ich auch brauchte. –