Помилка компіляції Eclipse: Ієрархія типу "Назва класу" невідповідна


139

Я завантажив програмне забезпечення з відкритим кодом, написане на Java, і спробував скомпілювати його за допомогою Eclipse. Я отримав помилку: " Ієрархія типу" Ім'я класу "невідповідна " в деяких файлах. Що викликає ці помилки та як їх виправити?

Відповіді:


161

Це означає, що ви намагаєтесь реалізувати неіснуючий інтерфейс або розширюєте неіснуючий клас.

Спробуйте оновити Eclipse.

Якщо це не працює, це може означати, що у вас є посилання на JAR, який не знаходиться в шляху збирання. Перевірте класний шлях свого проекту та переконайтеся, що в ньому знаходиться баночка, що містить інтерфейс або клас.


2
Поряд з подібними марними, у мене була залежність від Мейвена, яка спричиняла цю помилку у Spring Tool Suite. Рішення полягало в тому, щоб зробити a Maven> Download Sourceзалежність, про яку йдеться.
MrLore

kudos to @lagrantmere
Shailesh Pratapwar

2
Також переконайтеся, що Батько збирається. У моєму випадку я знав, що суперклас існує, але він насправді не склався належним чином.
Йосип Радєєв Мота

2
У мене був клас, що розширює абстрактний клас, який реалізує пропавший (перейменований поза затемненням) інтерфейс
Водолій Сила

4
У моєму випадку я розширював клас, який WAS був на шляху до класу (jar), але він розширював третій клас, який знаходився в іншій банці, яка не була в моєму класі.
JustinKSU

15

Іноді це трапляється, коли ви додаєте баночку, яка вам потрібна, але не включайте банки, необхідні ІТ. У моєму випадку додавання всіх баночок у tomcat / lib допомогло мені вирішити цю проблему. Я працюю над веб-додатком.


Дякую, це було моєю проблемою. Я включив GWT libs, але не вистачає jar API сервлетів Java (servlet-api-3.1.jar від Jetty в цьому випадку).
Джеймі

13

Перевірте свої помилки (вкладка «маркери»). У мене також була така помилка:

Архів необхідної бібліотеки в проекті не може бути прочитаний ...

і коли це було виправлено, "непослідовна помилка" зникла.

Насправді я додавав банки до шляху збирання, але чомусь їх не можна було прочитати помилково

Архів необхідної бібліотеки в проекті не може бути прочитаний або не є дійсним ZIP-файлом

Тому замість цього я додав їх як "Зовнішні банки". Це допомогло і всіх проблем зі збиранням більше не було!


5

У мене виникла ця проблема після того, як я модернізував JDK до нової версії. Мені довелося оновити посилання на бібліотеки в Project Properties / Java Build Path.


4

Ще один випадок у мене був. Дайте правильний шлях проекту та імпортуйте його до затемнення.

Потім перейдіть до Проекту -> Очистити -> Очистити всі проекти.



2

Ви побачите цю помилку, якщо якийсь клас у вашому бібліотечному файлі, який ви маєте у classpath, має посилання на неіснуючий клас (и), який може бути в іншому файлі jar. Тут я отримав цю помилку, коли не додавorg.springframework.beans-3.1.2.RELEASE.jar і розширив клас, з org.springframework.jdbc.core.support.JdbcDaoSupportякого був org.springframework.jdbc-3.1.2.RELEASE.jarмій класний шлях.


2

Проблема може полягати в тому, що ви включили неправильні банки. У мене була така ж проблема, і причина полягала в тому, що я включив неправильну бібліотеку JRE за замовчуванням у шлях збирання проекту. Я встановив Java з іншою версією і включав JRE-файли Java з іншою версією. (Я встановив JRE 1.6 у своїй системі і мав бібліотеку JRE 1.7, включену в шлях збірки завдяки раніше встановленій Java). Можливо, ви можете перевірити, чи потрібна бібліотека JRE, яку ви включили в шлях збирання, правильної версії, тобто. версії Java, встановленої у вашій системі.


2

Я відчував цю проблему на Eclipse Juno, першопричиною було те, що хоча деякі весняні банки були включені тимчасовими залежностями Maven, вони були включені в неправильні версії.

Тож слід перевірити, чи використовується модульований фреймворк як весна, що кожен модуль (або принаймні найважливіший: ядро, боби, контекст, aop, tx тощо) є в одній версії.

Щоб вирішити проблему, я використовував виключення незалежності, щоб уникнути неправильної версії перехідних залежностей.


2

Помилка: ієрархія типу "ім'я класу" - це несумісна помилка.

рішення: клас OtherDepJar {} -> знаходиться всередині "other.dep.jar" .

клас DepJar розширює OtherDepJar {} -> знаходиться всередині "dep.jar" .

клас ProblematicClass розширює DepJar {} -> знаходиться у поточному проекті.

Якщо dep.jar знаходиться в класі проекту, але other.dep.jar не входить в класний шлях проекту, Eclipse покаже "Ієрархія типу ... невідповідна помилка"


1

Для мене це було через неправильний імпорт. Насправді потрібно оновити імпорт після додавання бібліотеки підтримки v7.

Це можна виправити, виконавши наступне, для кожного класу вашого проекту :

  1. Видаліть усі рядки з import android.[*], у кожному класі
  2. Реорганізуйте імпорт: у контекстному меню виберіть Джерело / Упорядкувати імпорт або (CTRL + SHIFT + O)
  3. За запитом виберіть бібліотеки android.support.[*](а не android.[*]).

1

Однозначно, тому що бракувало залежностей, яких не було в моєму Maven pom.xml.

Наприклад, я хотів створити інтеграційні тести для моєї реалізації демонстраційного веб-сайту широкої електронної комерції.

Я включив широколистяну банку з інтеграційними тестами з широколистової торгівлі, щоб повторно використовувати їх конфігураційні файли та базові класи тестування. Цей проект мав інші тестові залежності, які я не включав, і я отримав помилку "непослідовної ієрархії".

Після копіювання "тестових залежностей" з broadleaf / pom.xml та пов'язаних змінних властивостей, які забезпечували версії для кожної залежності в broadleaf / pom.xml, помилка усунулася.

Властивості були:

    <geb.version>0.9.3</geb.version>
    <spock.version>0.7-groovy-2.0</spock.version>
    <selenium.version>2.42.2</selenium.version>
    <groovy.version>2.1.8</groovy.version>

Залежності були:

<dependency>
            <groupId>org.broadleafcommerce</groupId>
            <artifactId>integration</artifactId>
            <type>jar</type>
            <classifier>tests</classifier>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.broadleafcommerce</groupId>
            <artifactId>broadleaf-framework</artifactId>
            <version>${blc.version}</version><!--$NO-MVN-MAN-VER$ -->
            <classifier>tests</classifier>
        </dependency>
        <dependency>
            <groupId>com.icegreen</groupId>
            <artifactId>greenmail</artifactId>
            <version>1.3</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>2.5.1</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymockclassextension</artifactId>
            <version>2.4</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>5.9</version>
            <type>jar</type>
            <classifier>jdk15</classifier>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${groovy.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.gebish</groupId>
            <artifactId>geb-core</artifactId>
            <version>${geb.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.gebish</groupId>
            <artifactId>geb-spock</artifactId>
            <version>${geb.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>${spock.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-support</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-firefox-driver</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-chrome-driver</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
  <!-- Logging -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.12</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.6.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.6.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.6.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.hsqldb</groupId>
                <artifactId>hsqldb</artifactId>
                <version>2.3.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>

1

Якщо розширений клас має проблему, з'явиться вищезгадане повідомлення про помилку.

Приклад

class Example extends Example1 {

}

виправити проблеми в Example1


1

У мене був такий самий точний маркер проблеми, і я вирішив його, видаливши анотацію @Override з методу, який насправді був першою реалізацією ("супер" - абстрактним методом), а не перевизначенням.


1

У моєму випадку посилання на імпорт у багатьох класах містило додаткове слово. Я вирішив це, відредагувавши всі файли для правильного імпорту. Я почав робити правки вручну. Але коли я побачив викрійку, я автоматизував її за допомогою знахідки .. замінив у затемненні. Це вирішило помилку.



0

У мене теж була ця проблема ... Я дізнався, що ієрархію класу, який кидає цей виняток, не можна прослідкувати повним шляхом до його кореневого класу шляхом затемнення ... Я пояснюю:

У моєму випадку у мене є 3 проекти java: A, B і C ... де A і B - це проекти Maven, а C - звичайний проект затемнення java ...

У проекті A у мене є інтерфейс "interfaceA" ... У проекті B у мене є інтерфейс "interfaceB", який розширюється "interfaceA" У проекті C у мене є конкретний клас "classC", який реалізує "interfaceB"

"Проект C" включав "проект B" у свій шлях збірки, але не "проект A" (так що це стало причиною помилки) .... Після включення "проекту A" всередину контуру збирання "C" , все повернулося до норми ...


0

У мене був клас, який розширює LabelProvider в проекті з OSGi, там сталася помилка. Рішення полягало в тому, що: додавання org.eclipse.jface до необхідних плагінів у маніфесті.mf замість імпортування окремих пакетів, таких як org.eclipse.jface.viewers


0

якщо ви імпортуєте проект затемнення лише 1. Перейдіть до налаштування шляху збірки Java під властивостями проекту. 2. Якщо у бібліотеці системи JRE приєднано знак помилки до неї двічі клацніть її, щоб відкрити вікно редагування бібліотеки. 3. Змініть середовище виконання на правильну версію системи java або виберіть редагування інших параметрів, перевіривши присвоєні радіо кнопки їм. 4. Клацніть закінчити


0

При імпорті проекту GWT в Eclipse без встановлення "Плагіна Google для Eclipse" це станеться. Після встановлення "Плагіна Google для Eclipse" ця помилка зникне.


0

Клацніть правою кнопкою миші на папці проекту та оберіть «Шлях збірки Java». У розділі "Шлях збірки Java" ви маєте змогу бачити бібліотеки. Eclipse покаже помилки в будь-якій з цих бібліотек. Виправлення цієї проблеми допоможе вирішити проблему.


0

У мене виникла помилка після деякого злиття git з гілки, де мої класи розширили новий інтерфейс. Достатньо було оновити (F5) Дерево файлів у кадрі Провідника пакетів Eclipse.

Здається, Eclipse не оновив усе належним чином, і тому класи розширювали ще не існуючий інтерфейс. Після оновлення всі помилки зникли.


0

Мені довелося перейти з Eclipse Oxygen, який я отримав від IBM, і використав IBM JDK 8 на Eclipse Photon та Oracle JDK 8. Я працюю над налаштуваннями Java для .

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