Eclipse-Kompilierungsfehler: Die Hierarchie vom Typ 'Klassenname' ist inkonsistent

139

Ich habe eine in Java geschriebene Open Source-Software heruntergeladen und versucht, sie mit Eclipse zu kompilieren. Ich habe die Fehlermeldung erhalten: " Die Hierarchie vom Typ 'Klassenname' ist inkonsistent " in einigen Dateien. Was verursacht diese Fehler und wie behebe ich sie?

user1099579
quelle

Antworten:

161

Dies bedeutet, dass Sie versuchen, eine nicht vorhandene Schnittstelle zu implementieren, oder eine nicht vorhandene Klasse erweitern.

Versuchen Sie, Ihre Eclipse zu aktualisieren.

Wenn es nicht funktioniert, bedeutet dies möglicherweise, dass Sie einen Verweis auf eine JAR haben, die sich nicht im Erstellungspfad befindet. Überprüfen Sie den Klassenpfad Ihres Projekts und stellen Sie sicher, dass sich das JAR mit der Schnittstelle oder der Klasse darin befindet.

LaGrandMere
quelle
2
Ähnlich vergeblich hatte ich eine Maven-Abhängigkeit, die diesen Fehler in Spring Tool Suite verursachte. Die Lösung bestand darin, eine Maven> Download SourceAbhängigkeit von der fraglichen Abhängigkeit vorzunehmen.
MrLore
Ein großes
Lob
2
Überprüfen Sie auch, ob das übergeordnete Element kompiliert wird. In meinem Fall wusste ich, dass die Superklasse existiert, aber sie wurde nicht richtig kompiliert.
Joseph Rajeev Motha
2
Ich hatte eine Klasse, die eine abstrakte Klasse erweiterte, die eine fehlende (aus Eclipse umbenannte) Schnittstelle implementierte
Aquarius Power
4
In meinem Fall habe ich eine Klasse erweitert, die sich im Klassenpfad befand (ein Glas), aber es hat eine dritte Klasse erweitert, die sich in einem anderen Glas befand, das sich nicht in meinem Klassenpfad befand.
JustinKSU
15

Manchmal passiert es, wenn Sie ein Glas hinzufügen, das SIE benötigen, aber nicht die Gläser einschließen, die die IT benötigt. In meinem Fall hat mir das Hinzufügen aller Gläser in tomcat / lib geholfen, dieses Problem zu lösen. Ich arbeite an einer Web-App.

Ibolit
quelle
Danke, das war mein Problem. Ich habe GWT-Bibliotheken eingeschlossen, aber es fehlte die Java-Servlet-API-JAR (in diesem Fall servlet-api-3.1.jar von Jetty).
Jamie
13

Überprüfen Sie Ihre Fehler (Registerkarte "Markierungen"). Ich hatte auch folgenden Fehler:

Das Archiv für die erforderliche Bibliothek im Projekt kann nicht gelesen werden ...

und als das behoben war, verschwand der "inkonsistente Fehler".

Eigentlich hatte ich dem Build-Pfad Jars hinzugefügt, aber aus irgendeinem Grund konnten sie nicht fehlerhaft gelesen werden

Das Archiv für die erforderliche Bibliothek im Projekt kann nicht gelesen werden oder ist keine gültige ZIP-Datei

Also habe ich sie stattdessen als "Externe Gläser" hinzugefügt. Das hat geholfen und alle Kompilierungsprobleme waren nicht mehr!

Johan Valentin
quelle
5

Ich hatte dieses Problem, nachdem ich das JDK auf eine neue Version aktualisiert hatte. Ich musste die Verweise auf Bibliotheken in Projekteigenschaften / Java-Erstellungspfad aktualisieren.

jmst
quelle
4

Einen weiteren Fall hatte ich. Geben Sie den richtigen Projektpfad an und importieren Sie ihn in Eclipse.

Gehen Sie dann zu Projekt -> Bereinigen -> Alle Projekte bereinigen.

Ashokchakravarthi Nagarajan
quelle
4

Sie sollten das Projekt bereinigen oder Eclipse neu starten.

Thuy Nguyen
quelle
2

Dieser Fehler wird angezeigt, wenn eine Klasse in Ihrer Bibliotheksdatei, die Sie im Klassenpfad haben, auf nicht vorhandene Klassen verweist, die sich möglicherweise in einer anderen JAR-Datei befinden. Hier habe ich diesen Fehler erhalten, als ich keine org.springframework.beans-3.1.2.RELEASE.jarKlasse hinzugefügt und erweitert habe org.springframework.jdbc.core.support.JdbcDaoSupport, die sich in org.springframework.jdbc-3.1.2.RELEASE.jarmeinem Klassenpfad befindet.

James Jithin
quelle
2

Das Problem kann sein, dass Sie falsche Gläser hinzugefügt haben. Ich hatte das gleiche Problem und der Grund war, dass ich eine falsche Standard-JRE-Bibliothek in den Erstellungspfad des Projekts aufgenommen hatte. Ich hatte Java mit einer anderen Version installiert und enthielt JRE-Dateien von Java mit einer anderen Version. (Ich hatte JRE 1.6 in meinem System installiert und hatte JRE-Bibliothek 1.7 aufgrund von zuvor installiertem Java im Erstellungspfad enthalten.) Möglicherweise können Sie überprüfen, ob die JRE-Bibliothek, die Sie in den Erstellungspfad aufgenommen haben, die richtige Version hat, d. H. der Java-Version, die Sie in Ihrem System installiert haben.

Priti
quelle
2

Ich habe dieses Problem bei Eclipse Juno festgestellt. Die Hauptursache war, dass einige Frühlingsgläser zwar durch vorübergehende Maven-Abhängigkeiten aufgenommen wurden, aber in falschen Versionen enthalten waren.

Sie sollten daher prüfen, ob Sie ein modularisiertes Framework als Quelle verwenden, dass jedes Modul (oder zumindest das wichtigste: Core, Beans, Kontext, AOP, TX usw.) dieselbe Version hat.

Um das Problem zu lösen, habe ich Maven-Abhängigkeitsausschlüsse verwendet, um eine falsche Version vorübergehender Abhängigkeiten zu vermeiden.

Nicolas Barrera
quelle
2

Fehler: Die Hierarchie vom Typ "Klassenname" ist ein inkonsistenter Fehler.

Lösung: Die Klasse OtherDepJar {} -> befindet sich in "other.dep.jar" .

Klasse DepJar erweitert OtherDepJar {} -> befindet sich in "dep.jar" .

Klasse ProblematicClass erweitert DepJar {} -> befindet sich im aktuellen Projekt.

Wenn sich dep.jar im Klassenpfad des Projekts befindet, other.dep.jar jedoch nicht im Klassenpfad des Projekts, zeigt Eclipse den Fehler "Die Hierarchie des Typs ... ist inkonsistenter Fehler" an.

vijay mp
quelle
1

Für mich war das Problem auf falsche Importe zurückzuführen. Tatsächlich müssen die Importe nach dem Hinzufügen der v7-Unterstützungsbibliothek aktualisiert werden.

Dies kann für jede Klasse Ihres Projekts wie folgt behoben werden :

  1. Löschen Sie alle Zeilen mit import android.[*]in jeder Klasse
  2. Reorganisieren Sie Ihre Importe: Wählen Sie im Kontextmenü Quelle / Importe organisieren oder (STRG + UMSCHALT + O).
  3. Wenn Sie dazu aufgefordert werden, wählen Sie die Bibliotheken aus android.support.[*](und nicht android.[*]).
Luca Fagioli
quelle
1

Es war definitiv, weil Abhängigkeiten fehlten, die nicht in meinem Maven pom.xml waren.

Zum Beispiel wollte ich Integrationstests für meine Implementierung der Broadleaf-E-Commerce-Demo-Site erstellen.

Ich hatte ein Broadleaf-Jar mit Integrationstests von Broadleaf Commerce hinzugefügt, um deren Konfigurationsdateien und Basistestklassen wiederzuverwenden. Dieses Projekt hatte andere Testabhängigkeiten, die ich nicht aufgenommen hatte, und ich erhielt den Fehler "Inkonsistente Hierarchie".

Nach dem Kopieren der "Testabhängigkeiten" aus Broadleaf / pom.xml und den zugehörigen Eigenschaftsvariablen, die die Versionen für jede Abhängigkeit in Broadleaf / pom.xml bereitstellten, wurde der Fehler behoben.

Die Eigenschaften waren:

    <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>

Die Abhängigkeiten waren:

<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>
Bob
quelle
1

Wenn die erweiterte Klasse das Problem hat, wird die obige Fehlermeldung angezeigt.

Beispiel

class Example extends Example1 {

}

Beheben Sie die Probleme in Example1

user3195324
quelle
1

Ich hatte genau den gleichen Problemmarker und löste ihn, indem ich die Annotation @Override aus einer Methode entfernte, die tatsächlich die erste Implementierung war (die "super" ist eine abstrakte Methode) und keine Überschreibung.

Laurenţiu Lozan
quelle
1

In meinem Fall enthielten die Importreferenzen in vielen Klassen ein zusätzliches Wort. Ich habe es gelöst, indem ich alle Dateien bearbeitet habe, um die richtigen Importe zu erhalten. Ich habe angefangen, die Änderungen manuell vorzunehmen. Aber als ich das Muster sah, automatisierte ich es mit einem Find..replace in Eclipse. Dies hat den Fehler behoben.

CodeMed
quelle
0

Für mich war es die Änderung der Android-API-Ebene auf eine mit Google-APIs

Fernando Gallego
quelle
0

Ich hatte auch dieses Problem ... Ich fand heraus, dass die Hierarchie der Klasse, die diese Ausnahme auslöste, nicht durch Eclipse bis zu ihrer Stammklasse zurückverfolgt werden kann ... Ich erkläre:

In meinem Fall habe ich 3 Java-Projekte: A, B und C ... wobei A und B Maven-Projekte sind und C ein reguläres Java-Eclipse-Projekt ...

In Projekt A habe ich die Schnittstelle "interfaceA" ... In Projekt B habe ich die Schnittstelle "interfaceB", die "interfaceA" erweitert. In Projekt C habe ich die konkrete Klasse "classC", die "interfaceB" implementiert.

Das "Projekt C" hat das "Projekt B" in seinen Erstellungspfad aufgenommen, aber nicht "Projekt A" (das war die Ursache des Fehlers) .... Nachdem "Projekt A" in den Erstellungspfad von "C" aufgenommen wurde , alles ging wieder normal ...

Carlito's Weg
quelle
0

Ich hatte eine Klasse, die LabelProvider in einem Projekt mit OSGi erweitert, dort trat der Fehler auf. Die Lösung war: Hinzufügen von org.eclipse.jface zu den erforderlichen Plugins in manifest.mf, anstatt die einzelnen Pakete wie org.eclipse.jface.viewers zu importieren

Harry Siebert
quelle
0

Wenn Sie das Eclipse-Projekt nur importieren 1. Wechseln Sie unter den Projekteigenschaften zur Einstellung für den Java-Erstellungspfad. 2. Falls an die JRE-Systembibliothek ein Fehlerzeichen angehängt ist, doppelklicken Sie darauf, um das Fenster Bibliothek bearbeiten zu öffnen. 3. Ändern Sie die Ausführungsumgebung auf die richtige Java-Version des Systems oder wählen Sie Bearbeiten der anderen Einstellungen, indem Sie die Optionsfelder zuweisen aktivieren zu ihnen. 4. Klicken Sie auf Fertig stellen

Mumbai
quelle
0

Wenn Sie ein GWT-Projekt in Eclipse importieren, ohne "Google Plugin for Eclipse" zu installieren, tritt dies auf. Nach der Installation von "Google Plugin for Eclipse" verschwindet dieser Fehler.

Tom
quelle
0

Klicken Sie mit der rechten Maustaste auf den Projektordner und wählen Sie "Java Build Path". Unter "Java Build Path" sollten Sie Bibliotheken sehen können. Eclipse zeigt Fehler in jeder dieser Bibliotheken an. Das Beheben dieses Problems hilft, das Problem zu beheben.

HERR UND
quelle
0

Ich hatte diesen Fehler, nachdem ich eine Git-Zusammenführung von einem Zweig durchgeführt hatte, in dem meine Klassen eine neue Schnittstelle erweitert hatten. Es genügte, den Dateibaum im Paket-Explorer- Frame von Eclipse zu aktualisieren (F5) .

Es scheint, dass Eclipse nicht alles richtig aktualisiert hat und die Klassen daher eine noch nicht vorhandene Schnittstelle erweitert haben. Nach der Aktualisierung verschwanden alle Fehler.

nhaggen
quelle
0

Ich musste von Eclipse Oxygen, das ich von IBM erhalten hatte und IBM JDK 8 verwendete, zu Eclipse Photon und Oracle JDK 8 wechseln. Ich arbeite an Java-Anpassungen für .

Prediger
quelle