Ошибка затмения: косвенная ссылка из необходимых файлов .class?


186

Я получил ошибку в Eclipse. Что означает это сообщение об ошибке:

Тип iglu.ir.TermVector не может быть разрешен. На него косвенно ссылаются необходимые файлы .class


21
Добавьте jar, содержащий iglu.ir.TermVector, в исходный путь вашего проекта.
Гарри Джой

2
Если вы уверены, что класс предоставляется, попробуйте очистить и обновить все ваши проекты
Мирко

Это случилось со мной из-за переходных зависимостей в моих банках
Янак Мина

именно! этот jar-файл должен присутствовать в зависимостях pom.xml.
Гаурав

Ответы:


193

Это означает: «Классу, который вы используете, нужен другой класс, которого нет в пути к классам». Вы должны убедиться (как предлагает Гарри Джой), чтобы добавить необходимую банку к пути к классу.


3
Универсальный и простой ответ, который мне очень поможет в другом случае :) THX
Mariusz Chw

В частности, если вы пытаетесь удалить классы, проверьте родительские классы на наличие ссылок на отсутствующий тип. Если это не всегда то, что означает это сообщение, это то, что оно означает, вероятно, большую часть времени.
butallmj

Да, я обнаружил, что это произошло из-за отсутствующих банок в банках, на которые есть ссылки :) Спасибо.
Али Имран

21
@Arne, почему тогда говорят косвенно ссылаются? Разве это не должно сказать, что на него вообще нет ссылок?
Pacerier

2
@Pacerier это не будет правдой. Не ваш код напрямую ссылается на этот тип, а скорее на то, что ваш код использует, поэтому зависимость от вашего кода к этому типу является «только» транзитивной, но она есть. «Косвенно» говорит вам, где искать.
hiergiltdiestfu

22

Это скорее всего вопрос запутанности Eclipse, так как это настоящая ошибка. Я проигнорировал ошибку и запустил веб-сервис, на конечный интерфейс которого он жаловался, и он работал нормально, за исключением того, что мне приходилось иметь дело с диалогом каждый раз, когда я хотел его запустить. Просто еще одна непрозрачная ошибка, которая ничего мне не говорит.


Это также не в банке. Он входит в один из проектов, включенных во все включенные проекты, где он имеет какое-либо значение.
Джерри Миллер

3
Я столкнулся с этой проблемой в затмении, но построение через Maven работало нормально. Исправление состояло в том, чтобы удалить и повторно импортировать проект в рабочую область eclipse, которая содержала необходимые классы.
PiersyP

Это может иногда случаться, но я столкнулся с ошибками, которые дают тот же ответ, и проект не может быть построен.
Кристофер Коннери

13

Иногда это случается со мной, я всегда исправлял это с помощью команды «mvn eclipse: clean» для очистки старых свойств, а затем запускал mvn eclipse: eclipse -Dwtpversion = 2.0 (для веб-проекта, конечно). Сохранены некоторые старые свойства, поэтому иногда затмение запутывается.


Я очистил проект (из Project-> Clean ...), и он заработал.
Ану Шибин Джозеф Радж

mvn eclipse:cleanи / или mvn, eclipse:eclipseкажется, волшебная уловка, чтобы заставить это работать.
Антуан Мартин

13

У меня была эта ошибка из-за поврежденного локального хранилища maven .

Итак, чтобы решить проблему, все, что мне нужно было сделать, - это зайти в мой репозиторий и удалить папку, в которой находился заинтересованный файл .jar, а затем принудительно вызвать update mavenв Eclipse.


1
Это сработало для меня, в то время как прежде всего нет. Проблема возникла, когда один из моих товарищей по команде обновил версию хранилища из pom.
июля

8

Похоже, это была известная проблема (ошибка 67414), которая была решена в 3.0 ... кто-то заметил, что это происходит и для них в 3.4.

В то же время, обходной путь заключается в том, чтобы удалить системную библиотеку JRE из проекта, а затем снова добавить ее.

Here are the steps:

Перейти к свойствам проекта с ошибкой сборки (щелкните правой кнопкой мыши> Свойства)

Откройте вкладку «Библиотеки» в разделе «Путь сборки»

Найдите «Системную библиотеку JRE» в списке (если она отсутствует, то это сообщение об ошибке - не ошибка затмения, а неправильно настроенный проект)

Удалите «Системную библиотеку JRE»

Нажмите «Добавить библиотеку ...», выберите «Системная библиотека JRE» и добавьте соответствующий JRE для проекта (например, «JRE рабочей области по умолчанию»)

Нажмите «Готово» в выделении библиотеки и «ОК» в свойствах проекта, а затем дождитесь повторной сборки проекта.

Надеюсь, ошибка будет решена ...


Да. У меня была такая же проблема с spring-web-3.0.1.RELEASE. Пока она была зарегистрирована как зависимость в pom.xml и уже работала как зависимость в некоторых ссылках, когда я сделал http.csrf (). disable (). cors (). disable (). httpBasic (). and (). authorizeRequests () .antMatchers (PUBLIC_MATCHERS) .permitAll (). anyRequest (). authenticated (); Он сломался. Затем я скачал файл jar и импортировал его традиционным способом.
Цакироглу Фотис

5

Эта ошибка возникает, когда классы в файле jar не имеют ту же структуру, что и структура папок jar.

Например, если у вашего файла классов есть пакет com.test.exam, а у файла classes.jar, созданного из этого файла классов, есть структура test.exam ... будет выдано сообщение об ошибке. Вам нужно исправить структуру пакета вашего classes.jar и затем включить его в путь сборки ecplipse ...


4

Я получил это исключение, потому что Eclipse работал в другой версии JDK, просто изменился на правильный, очистить и собрать и работал!


3

У меня был интересный случай этой проблемы с Eclipse 4.4.2. Мой проект (P1) ссылался на внешний класс (проект P2) с двумя методами с одинаковым именем, но разными типами аргументов:

public static void setItem(Integer id) …
public static void setItem(Item item) …

Тип Itemсодержался в третьем проекте P3, который я не хотел видеть здесь. P1 вызвал только первый метод:

ExternalClass.setItem(Integer.valueOf(12345));

Таким образом, второй метод, который использовал Itemкласс, не использовался, и это правда, что P3 не был в пути к классам компиляции - зачем это нужно, если он не используется.

Еще затмение сказал мне

The type ...Item cannot be resolved.
It is indirectly referenced from required .class files

Компиляция из командной строки не вызвала таких проблем. Изменение имени второго метода (не использованного здесь!) Позволило устранить проблему и в Eclipse.


2
У меня точно такая же проблема с выпуском Eclipse Photon (4.8.0)
Delphin


2

Если вы все еще не можете найти что-то не так с вашей настройкой, вы можете попробовать Project -> Очистить и очистить все проекты в рабочей области.

РЕДАКТИРОВАТЬ: Извините, не видел предложение verbose_mode ... то же самое


2

Для меня это происходит, когда я обновляю свой jdk до 1.8.0_60 с моим старым набором jar-файлов, который использовался в течение длительного времени. Если я вернусь к jdk1.7.0_25, все эти проблемы исчезнут. Кажется, проблема в совместимости между JRE и библиотеками.


1

Я получил ошибку, когда я просто изменил некоторые настройки SVN и ничего в коде. Просто очистка проектов исправила ошибку.


1

В моем случае я создал проект и сделал его minSdkVersion=9и targetSdkVersion=17. Я использовал автоматически сгенерированный libs/android-support-v4.jar. Я также должен был использовать ActionBarActivityиспользование android-support-v7-appcomapt.jar. Поэтому я просто скопировал android-support-v7-appcompat.jarфайл из android-sdk/extras/andrid/support/v7/appcompat/libsпапки и вставил его в libsпапку своего проекта . И это вызвало вышеуказанную ошибку. В общем, мне нужно было поместить android-support-v4.jarфайл из папки android-sdk/extras/andrid/support/v7/appcompat/libsпроекта libs. Насколько мне известно, v7.jarфайл имел зависимости от v4.jarфайла. Итак, ему нужен был собственный v4.jarфайл, а не мой проект, автоматически созданный v4.jarфайл.


1

Быстро и просто я исправил это так (я использую версию ADT: v21.0.0-531062 в Windows XP Home Edition)

  1. Открыт файл манифеста.
  2. Изменил существующий проект minSdkVersion на то же значение, что и maxSdkVersion (советую: может быть полезно создать новый проект и посмотреть, что это такое maxSdkVersion)
  3. Сохраните файл манифеста.
  4. Щелкните правой кнопкой мыши проект и выберите Build Project.
  5. Из верхнего меню: Проект - Очистить .. - установите флажок Только соответствующий проект, ниже я установил флажок Начать сборку немедленно и построить только выбранные проекты и ОК.
  6. откройте файл Java - больше никаких красных ошибок!
  7. Вернитесь к шагу 1 выше и измените значение Back minSdkVersion на «Исходное» (для поддержки как можно большего числа версий Android).

Это сработало, НО проблема возвращается каждые несколько дней. Я делаю то же, что и выше, и это решает и позволяет мне развиваться.


0

В дополнение к уже предложенной причине пропуска файла класса эта ошибка также может указывать на дубликат файла класса, eclipse сообщает об этой ошибке, когда файл класса в пути сборки использует другой класс, имеющий несколько определений в пути сборки.


0

Поскольку вы даете нам очень мало деталей, скорее всего, что вы сделали, что является невероятно простой ошибкой, это вместо того, чтобы идти к

Build Path > Configure Build Path > Projects

и добавив туда свою дополнительную папку проекта, вместо этого вы пошли на

Build Path > Configure Build Path > Libraries

и вместо этого добавил папку вашего проекта.

Это наиболее определенно так, если ваш код корректен, но после автоматической реорганизации импорта с помощью ctrl+spaceярлыка вместо ваших операторов импорта, ссылающихся на com.your.additionalproject, все ваши ссылки указывают на bin.com.your.additionalproject.

Обратите внимание на корзину. Это означает, что вы косвенно ссылаетесь на свой класс, рассматривая структуру папок вашего другого проекта как библиотеку, заставляя IDE выполнять всю работу по поиску именно двоичного класса, на который вы ссылаетесь.

Чтобы исправить это, удалите папку из библиотек, а вместо этого добавьте ее на вкладке «Проекты» и реорганизуйте импорт. Ваш проект должен работать нормально.


0

Когда я использую новую версию Eclipse и пытаюсь использовать предыдущую рабочую область, которую я использовал со старой версией Eclipse, эта ошибка произошла.

Вот как я решаю проблему:

Щелкните правой кнопкой мыши мой проект в Package Explorer -> Properties -> Java Build Path -> Libraries -> Я вижу ошибку (Cross Sign) в системной библиотеке JRE. Потому что путь не может быть найден. -> Дважды щелкните Системная библиотека JRE -> Выберите опцию «JRE по умолчанию для рабочей области» -> Готово -> ОК. -> БУМ, ЭТО РАБОТАЕТ

FYI.


0

В моем случае это было результатом моего добавления новой зависимости к моему pom.xmlфайлу.

Новая зависимость зависела от старой версии библиотеки (2.5). Та же самая библиотека требовалась другой моей библиотекой pom.xml, но для нее требовалась версия 3.0.

По какой-то причине, когда Maven сталкивается с этими конфликтами, он просто пропускает самую последнюю версию. В Eclipse при просмотре pom.xmlвы можете выбрать вкладку «Иерархия зависимостей» внизу, чтобы увидеть, как разрешаются зависимости. Здесь вы найдете, не была ли данная библиотека (и, следовательно, класс) рассматриваемой по этой причине.

В моем случае это было так же просто, как заблокировать новую версию. Вы можете сделать это, щелкнув правой кнопкой мыши на записи - в контекстном меню есть возможность заблокировать ее.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.