【问题标题】:Same source code, Eclipse build success but Maven (javac) fails相同的源代码,Eclipse 构建成功但 Maven (javac) 失败
【发布时间】:2010-12-09 05:36:56
【问题描述】:

使用 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。这可能是什么问题?

【问题讨论】:

    标签: java eclipse generics compiler-errors


    【解决方案1】:

    当您的代码是通用的并且它调用具有通用返回类型的另一个方法时,可能会出现此问题。有时编译器会在试图弄清楚如何解析方法调用/返回类型时感到困惑。

    可以通过在代码中添加显式强制转换来解决。

    // 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.
    }
    

    【讨论】:

      【解决方案2】:

      需要注意的几点:

      1. Eclipse 和 Maven 都使用相同的 java/bin 安装
      2. Eclipse 和 Maven 使用相同的库,一个可能有另一个没有的东西。

      【讨论】:

      • 我刚刚意识到 Eclipse 附带的编译器与 Sun 的官方 java 编译器不同。
      【解决方案3】:

      我遇到了同样的错误,使用 ant。 因为ant或者maven编译的时候javac是用JDK编译的,但是eclipse里面有JDT,可以编译成功。

      我在 build.xml 文件中添加以下脚本: &lt;property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" /&gt; 那么,ant就可以建立成功了。

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

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

      也许你的代码也是。

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

      PS,我已经将eclipse插件中JDT的jar文件复制到ant_home/lib目录下。

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

      【讨论】:

        【解决方案4】:

        这肯定与 maven 和 eclipse 正在使用的 JDK 版本有关。还要确保您在 Eclipse 中的编译器合规级别指向正确的 JDK 版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-05
          • 1970-01-01
          • 2022-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-03
          • 2011-03-09
          相关资源
          最近更新 更多