Ошибка компиляции Eclipse: иерархия типа "Имя класса" несовместима

142

Я загрузил программное обеспечение с открытым исходным кодом, написанное на Java, и попытался скомпилировать его с помощью Eclipse. Я получил ошибку: « Иерархия типа« Имя класса »несовместима » в некоторых файлах. Что вызывает эти ошибки и как их исправить?

user1099579
источник

Ответы:

165

Это означает, что вы пытаетесь реализовать несуществующий интерфейс или расширяете несуществующий класс.

Попробуйте обновить свой Eclipse.

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

LaGrandMere
источник
2
Наряду с аналогичным тщеславием у меня была зависимость Maven, которая вызывала эту ошибку в Spring Tool Suite, решение заключалось в том, чтобы сделать Maven> Download Sourceна рассматриваемой зависимости.
MrLore
Слава тебе @lagrantmere
Шайлеш Пратапвар
2
Также убедитесь, что родительский объект компилируется. В моем случае я знал, что суперкласс существует, но на самом деле он не компилировался должным образом.
Джозеф Раджив Мота
2
У меня был класс, расширяющий абстрактный класс, который реализовывал отсутствующий (переименованный из eclipse) интерфейс
Aquarius Power
4
В моем случае я расширял класс, который БЫЛ в пути к классам (jar), но он расширил третий класс, который находился в другом jar, которого не было в моем пути к классам.
JustinKSU
15

Иногда это происходит, когда вы добавляете банку, которая вам нужна, но не включаете в нее нужные ЕМУ. В моем случае добавление всех банок в tomcat / lib помогло мне решить эту проблему. Я работаю над веб-приложением.

Иболит
источник
Спасибо, это была моя проблема. Я включил библиотеки GWT, но отсутствовал jar API сервлетов Java (в данном случае servlet-api-3.1.jar от Jetty).
Джейми
13

Проверьте свои ошибки (вкладка «маркеры»). У меня также была следующая ошибка:

Архив для необходимой библиотеки в проекте не читается ...

и когда это было исправлено, "несовместимая ошибка" исчезла.

На самом деле я добавил jar-файлы в путь сборки, но по какой-то причине их нельзя было прочитать с ошибкой

Архив для необходимой библиотеки в проекте не может быть прочитан или является недействительным ZIP-файлом

Поэтому вместо этого я добавил их как «Внешние банки». Это помогло, и проблем с компиляцией больше не было!

Йохан Валентин
источник
5

У меня возникла эта проблема после того, как я обновил JDK до новой версии. Мне пришлось обновить ссылки на библиотеки в Project Properties / Java Build Path.

jmst
источник
5

Еще один случай у меня был. Укажите правильный путь к проекту и импортируйте его в eclipse.

Затем перейдите в Проект -> Очистить -> Очистить все проекты.

Ашокчакраварти Нагараджан
источник
4

Вы должны очистить проект или перезапустить Eclipse.

Туи Нгуен
источник
2

Вы увидите эту ошибку, если какой-либо класс в вашем библиотечном файле, который у вас есть в пути к классам, имеет ссылку на несуществующие классы, которые могут быть в другом файле 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, основная причина заключалась в том, что, хотя некоторые jar-файлы Spring включались временными зависимостями maven, они были включены в неправильные версии.

Поэтому вы должны проверить, используете ли модульный фреймворк в качестве пружины, что все модули (или, по крайней мере, наиболее важные: core, beans, context, aop, tx и т. Д.) Находятся в одной версии.

Чтобы решить эту проблему, я использовал исключения зависимости maven, чтобы избежать неправильной версии временных зависимостей.

Николя Баррера
источник
2

Ошибка: иерархия типа «имя класса» является несовместимой ошибкой.

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

class DepJar extends OtherDepJar {} -> находится внутри "dep.jar" .

class ProblematicClass extends 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

user3195324
источник
1

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

Лауреньиу Лозан
источник
1

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

CodeMed
источник
0

Для меня это было изменение уровня Android API на уровень с API Google.

Фернандо Гальего
источник
0

У меня тоже была эта проблема ... Я обнаружил, что иерархия класса, который генерировал это исключение, не может быть прослежена до его корневого класса с помощью eclipse ... Объясняю:

В моем случае у меня есть 3 Java-проекта: A, B и C ... где A и B - это проекты maven, а C - обычный проект java eclipse ...

В проекте A у меня есть интерфейс «interfaceA» ... В проекте B у меня есть интерфейс «interfaceB», который расширяет «interfaceA». В проекте C у меня есть конкретный класс «classC», который реализует «interfaceB»

«Проект C» включал «проект B» в свой путь сборки, но не «проект A» (так что это было причиной ошибки) .... После включения «проекта A» в путь сборки «C» , все вернулось в норму ...

Carlitos Way
источник
0

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

Гарри Зиберт
источник
0

если вы импортируете проект eclipse, просто 1. Перейдите к настройке пути сборки java в свойствах проекта. 2. Если к системной библиотеке JRE прикреплен знак ошибки, дважды щелкните по нему, чтобы открыть окно «Редактировать библиотеку». 3. Измените среду выполнения на правильную версию Java системы или выберите «Изменить другие параметры», установив переключатель «Назначить» им. 4. Нажмите "Готово".

мумбаса
источник
0

Это произойдет при импорте проекта GWT в Eclipse без установки «Плагина Google для Eclipse». После установки «Плагина Google для Eclipse» эта ошибка исчезнет.

Том
источник
0

Щелкните правой кнопкой мыши папку проекта и выберите «Путь сборки Java». В разделе «Путь сборки Java» вы должны увидеть библиотеки. Eclipse покажет ошибки в любой из этих библиотек. Устранение этой проблемы поможет решить проблему.

Г-Н И
источник
0

У меня возникла эта ошибка после некоторого слияния git из ветки, где мои классы расширили новый интерфейс. Достаточно было обновить (F5) дерево файлов во фрейме Package Explorer Eclipse.

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

Nhaggen
источник
0

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

Проповедник
источник