Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: EnToutCasОтветов: 4

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

javaeclipsecompiler-errorsgenerics

Ответы

Ответ 1 · рейтинг 12 · Mike Hopper

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

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

// 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 · рейтинг 3 · Jay

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

  1. И Eclipse, и Maven используют одну и ту же установку java/bin.
  2. Eclipse и Maven используют одни и те же библиотеки, у одного может быть что-то, чего нет у другого.

Ответ 3 · Lena

Я встретил ту же ошибку, используйте 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.

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

Ответ 4 · Pramit Sinha

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы