相同的源代码,Eclipse构建成功但Maven(javac)失败

时间:2009-10-22 19:45:33

标签: java eclipse generics compiler-errors

使用Maven编译时不断出现此错误:

type parameters of <X>X cannot be determined; no unique maximal instance exists for type variable X with upper bounds int,java.lang.Object

泛型类型干扰不能应用于原始类型。但是我认为自Java5以来,装箱/拆箱机制在原始类型和包装类之间无缝地工作。

无论如何,奇怪的是Eclipse没有报告任何错误并且愉快地编译。我正在使用JDK1.6.0_12。这可能是什么问题?

4 个答案:

答案 0 :(得分:12)

当您的代码是通用代码并且它调用另一个具有泛型返回类型的方法时,可能会发生此问题。有时编译器会弄清楚如何解决方法调用/返回类型。

可以通过向代码中添加显式强制转换来解决此问题。

// Old code:
public T getValue() {
    return otherMethod();  // otherMethod has the signature: <RT> RT otherMethod() { ... }
}

// New code:
@SuppressWarnings("unchecked")
public T getValue() {
    return (T) otherMethod();   // the cast tells the compiler what to do.
}

答案 1 :(得分:3)

要注意的一些事项:

  1. Eclipse和Maven都使用相同的java / bin安装
  2. Eclipse和Maven正在使用相同的库,其中一个可能没有。

答案 2 :(得分:0)

我遇到了同样的错误,请使用ant。 因为当用ant或maven编译时,javac使用JDK编译。但是在eclipse中,它有JDT,可以编译成功。

我在build.xml文件中添加以下脚本: <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" /> 然后,蚂蚁可以建立成功。

我不熟悉Maven。也许,它可以设置编译器吗?

在我的源代码中,有很多这样的代码: public <X> X find(String hql, Object... values) { return (X) HibernateUtils.createQuery(getSession(), hql, values).uniqueResult(); }

也许你的代码也是。

但是,使用JDT,成功不是最终的成功,在蚂蚁。 build.xml只能在eclipse中构建成功。 当我从Windows命令运行ant时,失败。抛出另一个错误: Class not found: org.eclipse.jdt.core.JDTCompilerAdapter

PS,我在eclipse插件中将关于JDT的jar文件复制到ant_home / lib目录。

希望对你有所帮助。我们的问题可以解决。

答案 3 :(得分:0)

它肯定要对maven和eclipse正在使用的JDK版本做些什么。还要确保eclipse中的编译器合规性级别指向正确的JDK版本。