2012-08-30 62 views
5

我在使用maven编译但在eclipse中工作时出现编译错误。两者都使用相同的JDK:错误的maven编译错误(在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" 

这是错误:

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

这是代码(在Eclipse中没有编译错误):

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

我知道,这是一个漂亮的递归问题,我发现了几个相同的帖子,但似乎没有人提供标准修正。有些人认为它适用于不同的JDK版本。我已经用1.6.0_30,1.6.0_31,1.6.0_32和1.6.0_35进行了测试,都失败了。

有什么想法?

谢谢

+0

您是否正在设置编译器插件的源版本和目标版本?见http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html – beny23

+1

是 - > 1.6 1.6 Curro

+1

Eclipse不使用来自JDK的编译器。它只需要引用图书馆的JDK!所以Maven编译器接受一些代码是完全可能的,而JDK编译器(Maven默认使用的)不支持。大多数时候,当我看到这两种不同时,Eclipse编译器就是符合标准的编译器。 –

回答

14

我怀疑eclipse没有使用你认为它是JDK。尝试使用类型删除。

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

双重检查安装的JRE并在eclipse中构建路径......正如预期的那样(1.6.0_35)。无论如何....类型擦除作品!非常感谢!! – Curro

+0

在编译过程中,我知道类型擦除是一个概念,但不是一种明确的编码技术。谢谢你的回答,这也是我需要的。 –