Помилка затемнення: опосередковано посилається на потрібні файли .class?


185

Я отримав помилку в Eclipse. Що означає це повідомлення про помилку:

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


21
Додайте баночку, яка містить iglu.ir.TermVector у вихідний шлях вашого проекту.
Гаррі Радість

2
Якщо ви впевнені, що клас забезпечений, спробуйте очистити та оновити всі свої проекти
Mirco

Це сталося зі мною через перехідні залежності в моїх банках
Джанак Мена

точно! ця баночка повинна бути присутнім у залежності від pom.xml.
gaurav

Відповіді:


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
Це працювало на мене, в той час, як усе вище не було. Проблема виникла, коли один з моїх товаришів по команді оновив версію сховища з пам’яті.
iaL

8

Здається, це була відома проблема (Bug 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 (). disabled (). cors (). disabled (). httpBasic (). and (). autizeRequests () .antMatchers (PUBLIC_MATCHERS) .permitAll (). anyRequest (). authentication (); Він зламався. Потім я завантажив файл jar та імпортував його традиційним ручним способом.
Цакіроглоу Фотіс

5

Ця помилка виникає, коли класи у файлі jar не відповідають тій самій структурі, що і у структурі папок банку.

Наприклад, якщо у файлі класу є пакет com.test.exam, а у файлів class.jar, створеного з цього файлу класу, є структура test.exam ... буде викинута помилка. Вам потрібно виправити структуру пакета для вашага groups.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 Release (4.8.0)
Delphin


2

Якщо ви все ще не можете знайти нічого поганого в налаштуванні, ви можете спробувати Project -> Очистити та очистити всі проекти в робочій області.

EDIT: Вибачте, я не бачив пропозиції verbose_mode ... те саме


2

Для мене це трапляється, коли я модернізував jdk до 1.8.0_60 моїм старим набором банок, який використовувався давно. Якщо я повернусь до 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)

  1. Відкрито файл маніфесту.
  2. Змінили існуючий проект minSdkVersion на те саме значення, що і maxSdkVersion (порадьте: можливо, було б добре створити новий проект і подивитися, що це maxSdkVersion)
  3. Збережіть файл маніфесту.
  4. Клацніть правою кнопкою миші проект та виберіть Створити проект.
  5. У верхньому меню: Проект - Очистити .. - Поставте прапорець Тільки відповідний проект, нижче я поставив прапорець Почати складання негайно та створити лише вибрані проекти та ОК.
  6. відкрити файл Java - більше НЕ червоних помилок!
  7. Поверніться до кроку 1 вище та змінивши Назад 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, ця помилка сталася.

Ось як я вирішую проблему:

Клацніть правою кнопкою миші проект на Explorer Explorer -> Властивості -> Шлях збірки Java -> Бібліотеки -> Я бачу помилку (перехресний знак) у системній бібліотеці JRE. Тому що шлях неможливо знайти. -> Двічі клацніть системну бібліотеку JRE -> Оберіть опцію "Робоча область за замовчуванням JRE" -> Готово -> ОК. -> БУМ ТОЙ РОБОТИ

FYI.


0

У моєму випадку це було результатом мого додавання нової залежності до мого pom.xmlфайлу.

Нова залежність залежала від старої версії бібліотеки (2.5). Цю ж бібліотеку вимагала інша бібліотека в моєму pom.xml, але вона вимагала версії 3.0.

Чомусь, коли Мейвен стикається з цими конфліктами, він просто опускає останню версію. У програмі Eclipse під час перегляду pom.xmlви можете вибрати вкладку "Ієрархія залежності" внизу, щоб побачити, як вирішуються залежності. Тут ви дізнаєтесь, чи не було цієї бібліотеки (і, таким чином, класу) пропущено з цієї причини.

У моєму випадку це було так само просто, як заблокувати нову версію. Це можна зробити, клацнувши правою кнопкою миші запис - є можливість заблокувати її в контекстному меню.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.