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?
139
Maven
>Download Source
Abhängigkeit von der fraglichen Abhängigkeit vorzunehmen.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.
quelle
Überprüfen Sie Ihre Fehler (Registerkarte "Markierungen"). Ich hatte auch folgenden Fehler:
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
Also habe ich sie stattdessen als "Externe Gläser" hinzugefügt. Das hat geholfen und alle Kompilierungsprobleme waren nicht mehr!
quelle
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.
quelle
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.
quelle
Sie sollten das Projekt bereinigen oder Eclipse neu starten.
quelle
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.jar
Klasse hinzugefügt und erweitert habeorg.springframework.jdbc.core.support.JdbcDaoSupport
, die sich inorg.springframework.jdbc-3.1.2.RELEASE.jar
meinem Klassenpfad befindet.quelle
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.
quelle
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.
quelle
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.
quelle
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 :
import android.[*]
in jeder Klasseandroid.support.[*]
(und nichtandroid.[*]
).quelle
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:
Die Abhängigkeiten waren:
quelle
Wenn die erweiterte Klasse das Problem hat, wird die obige Fehlermeldung angezeigt.
Beispiel
Beheben Sie die Probleme in
Example1
quelle
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.
quelle
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.
quelle
Für mich war es die Änderung der Android-API-Ebene auf eine mit Google-APIs
quelle
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 ...
quelle
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
quelle
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
quelle
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.
quelle
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.
quelle
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.
quelle
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 maximo.
quelle