2009-10-22 49 views
7

請使用Maven編譯時收到此錯誤:相同的源代碼,Eclipse構建成功,但Maven的(javac的)失敗

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。這裏可能是什麼問題?

回答

3

有幾件事情來看待:

  1. Eclipse和Maven的使用同一個Java/bin中安裝
  2. 的Eclipse和Maven都使用相同的圖書館,一個可能有一些其他的沒有。
+2

我剛剛意識到Eclipse附帶的編譯器與Sun官方的java編譯器不同。 – EnToutCas 2009-10-22 20:10:22

11

當您的代碼是通用的並且它調用具有通用返回類型的另一個方法時,可能會發生此問題。有時編譯器會弄糊塗,試圖找出如何解決方法調用/返回類型。

它可以通過向您的代碼添加顯式強制轉換來解決。

// 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. 
} 
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,我有複製jar文件關於JDT在eclipse插件到ant_home/lib目錄。

希望對你有一點幫助,並且我們的問題可以解決。

0

它肯定要做的事情與JDK版本maven和eclipse正在使用。還要確保eclipse中的編譯器合規性級別指向正確的JDK版本。

相關問題