Тот же исходный код, успешная сборка Eclipse, но сбой Maven (javac)

Продолжайте получать эту ошибку при компиляции с использованием 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. В чем здесь может быть проблема?


person EnToutCas    schedule 22.10.2009    source источник


Ответы (4)


Эта проблема может возникнуть, если ваш код является универсальным и вызывает другой метод с универсальным типом возвращаемого значения. Иногда компилятор путается, пытаясь понять, как разрешить тип вызова/возврата метода.

Это можно решить, добавив в код явное приведение типов.

// 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.
}
person Mike Hopper    schedule 03.01.2011

Несколько вещей, на которые стоит обратить внимание:

  1. И Eclipse, и Maven используют одну и ту же установку java/bin.
  2. Eclipse и Maven используют одни и те же библиотеки, у одного может быть что-то, чего нет у другого.
person Jay    schedule 22.10.2009
comment
Я только что понял, что компилятор, поставляемый с Eclipse, отличается от официального java-компилятора Sun. - person EnToutCas; 23.10.2009

Я встретил ту же ошибку, используйте ant. Потому что при компиляции с помощью ant или maven javac использует JDK для компиляции. Но в eclipse у него есть JDT, который может успешно скомпилировать.

Я добавляю нижеприведенный скрипт в свой файл build.xml: <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" /> Затем муравей может добиться успеха.

Я не знаком с Мавеном. Может быть, это может установить компилятор?

В моем исходном коде много такого кода: public <X> X find(String hql, Object... values) { return (X) HibernateUtils.createQuery(getSession(), hql, values).uniqueResult(); }

Может быть, и ваш код тоже.

Но, используя JDT, успех не является окончательным успехом в ant. build.xml может добиться успеха только в eclipse. когда я запускаю муравей из команды Windows, терпит неудачу. Выбросьте еще одну ошибку: Class not found: org.eclipse.jdt.core.JDTCompilerAdapter

PS, я скопировал jar-файлы о JDT в плагине eclipse в каталог ant_home/lib.

Желаю вам немного помочь. И наша проблема может решить.

person Lena    schedule 11.05.2012

Это определенно должно что-то делать с версиями JDK, которые используют maven и eclipse. Также убедитесь, что ваш уровень соответствия компилятора в eclipse указывает на правильную версию JDK.

person Pramit Sinha    schedule 29.10.2014