2009-10-22 17 views
7

Wciąż dostaję ten błąd podczas kompilacji przy użyciu Maven:kod źródłowy samo, Eclipse budować sukces ale Maven (javac) nie

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

rodzajowych typu zakłócenia nie mogą być stosowane do prymitywnych typów. Ale myślałem, że od czasu Java5 mechanizm boksu/rozpakowywania działa bezproblemowo między typami pierwotnymi a klasami otoki.

W każdym razie dziwne jest to, że Eclipse nie zgłasza żadnych błędów i szczęśliwie się komplikuje. Używam JDK1.6.0_12. Co może być tutaj problemem?

Odpowiedz

3

Kilka rzeczy patrzeć:

  1. Zarówno Eclipse i Maven są przy użyciu tej samej instalacji java/bin
  2. Eclipse i Maven są przy użyciu tych samych bibliotek, można mieć coś inne nie.
+2

Właśnie zdałem sobie sprawę, że kompilator dostarczany z Eclipse nie jest tym samym, co oficjalny kompilator języka Java firmy Sun. – EnToutCas

11

Ten problem może wystąpić, gdy kod jest ogólny i wywołuje inną metodę, która ma ogólny typ zwracany. Czasami kompilator jest zdezorientowany, próbując dowiedzieć się, jak rozwiązać typ wywołania/zwrotu metody.

Można to rozwiązać, dodając wyraźne rzutowanie do kodu.

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

Spotkałem ten sam błąd, użyj mrówki. Ponieważ podczas kompilacji przez mrówkę lub maven, javac używa JDK do kompilacji. Ale w czasie zaćmienia ma JDT, który może skompilować sukces.

Dodaję poniższy skrypt do pliku build.xml: <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" /> Następnie mrówka może odnieść sukces.

Nie znam Mavena. Może, może ustawić kompilator?

W moim kodu źródłowego, istnieje wiele kod tak: public <X> X find(String hql, Object... values) { return (X) HibernateUtils.createQuery(getSession(), hql, values).uniqueResult(); }

Może też kod.

Ale, używając JDT, sukces nie jest ostatecznym sukcesem, w mrówce. build.xml może budować sukces tylko w czasie zaćmienia. po uruchomieniu polecenia ant z systemu windows, niepowodzenie. Rzuć innym błędem: Class not found: org.eclipse.jdt.core.JDTCompilerAdapter

PS, mam pliki JAR kopii w JDT wtyczki eclipse do katalogu ant_home/lib.

Życzę małej pomocy. I nasz problem może rozwiązać.

0

To zdecydowanie musi coś zrobić z mavenem JDK i używa Eclipse. Upewnij się też, że poziom zgodności Kompilatora w punktach zaćmienia odpowiada właściwej wersji JDK.

Powiązane problemy