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

186

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

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

Karikari
источник
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 рабочей области по умолчанию»)

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

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

NPKR
источник
Да. У меня была такая же проблема с 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 ...

Mayur
источник
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.

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

Что исправило это для меня right clicking on project > Maven > Update Project

Эдуардо Деннис
источник
2

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

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

Денис
источник
2

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

Мин Леунг
источник
1

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

user2774465
источник
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файл.

laaptu
источник
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).

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

user3445991
источник
0

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

MilesHampson
источник
0

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

Build Path > Configure Build Path > Projects

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

Build Path > Configure Build Path > Libraries

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

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

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

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

steelmonkey
источник
0

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

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

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

FYI.

oiyio
источник
0

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

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

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

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

Крис Стэйкос
источник
0

Укажите JRE в пути сборки на JDK. Это сработало для меня.

Нилешкумар С
источник