Erreur de compilation Eclipse: la hiérarchie du type 'Nom de classe' est incohérente

139

J'ai téléchargé des logiciels open source écrits en Java et essayé de les compiler en utilisant Eclipse. J'ai eu l'erreur: " La hiérarchie du type 'Nom de classe' est incohérente " dans certains fichiers. Quelles sont les causes de ces erreurs et comment les corriger?

user1099579
la source

Réponses:

161

Cela signifie que vous essayez d'implémenter une interface non existante ou que vous étendez une classe non existante.

Essayez de rafraîchir votre Eclipse.

Si cela ne fonctionne pas, cela peut signifier que vous avez une référence à un JAR qui ne se trouve pas dans le chemin de construction. Vérifiez le chemin de classe de votre projet et vérifiez que le fichier jar contenant l'interface ou la classe s'y trouve.

LaGrandMere
la source
2
Dans le même temps, j'avais une dépendance Maven qui causait cette erreur dans Spring Tool Suite, la solution était de faire un Maven> Download Sourcesur la dépendance en question.
MrLore
bravo à vous @lagrantmere
Shailesh Pratapwar
2
Vérifiez également que le parent est en cours de compilation. Dans mon cas, je savais que la superclasse existait, mais elle n'était pas vraiment compilée correctement.
Joseph Rajeev Motha
2
J'avais une classe étendant une classe abstraite qui implémentait une interface manquante (renommée hors eclipse)
Aquarius Power
4
Dans mon cas, j'étendais une classe qui était dans le chemin de classe (un fichier jar), mais cela a étendu une troisième classe qui était dans un autre fichier qui n'était pas dans mon chemin de classe.
JustinKSU
15

Parfois, cela se produit lorsque vous ajoutez un fichier dont VOUS avez besoin, mais n'incluez pas les fichiers dont le service informatique a besoin. Dans mon cas, l'ajout de tous les jars dans tomcat / lib m'a aidé à résoudre ce problème. Je travaille sur une application Web.

Ibolit
la source
Merci, c'était mon problème. J'ai inclus les bibliothèques GWT, mais il manquait le jar de l'API de servlet Java (servlet-api-3.1.jar de Jetty dans ce cas).
Jamie le
13

Vérifiez vos erreurs (onglet "marqueurs"). J'ai également eu l'erreur suivante:

Impossible de lire l'archive de la bibliothèque requise dans le projet ...

et quand cela a été corrigé, l '"erreur incohérente" a disparu.

En fait, j'avais ajouté des fichiers JAR au chemin de construction, mais pour une raison quelconque, ils ne pouvaient pas être lus avec une erreur

L'archive de la bibliothèque requise dans le projet ne peut pas être lue ou n'est pas un fichier ZIP valide

Donc, à la place, je les ai ajoutés en tant que «pots externes». Cela a aidé et tous les problèmes de compilation n'étaient plus!

Johan Valentin
la source
5

J'ai eu ce problème après avoir mis à niveau le JDK vers une nouvelle version. J'ai dû mettre à jour les références aux bibliothèques dans Propriétés du projet / Chemin de construction Java.

jmst
la source
4

Un autre cas que j'ai eu. Donnez le chemin du projet correct et importez-le dans eclipse.

Ensuite, allez dans Projet -> Nettoyer -> Nettoyer tous les projets.

Ashokchakravarthi Nagarajan
la source
4

Vous devez nettoyer le projet ou redémarrer Eclipse.

Thuy Nguyen
la source
2

Vous verrez cette erreur au cas où une classe de votre fichier de bibliothèque que vous avez dans classpath fait référence à une ou plusieurs classes non existantes qui pourraient être dans un autre fichier jar. Ici, j'ai reçu cette erreur lorsque je n'ai pas ajouté org.springframework.beans-3.1.2.RELEASE.jaret j'ai étendu une classe à partir de org.springframework.jdbc.core.support.JdbcDaoSupport, qui était dans org.springframework.jdbc-3.1.2.RELEASE.jarmon classpath.

James Jithin
la source
2

Le problème peut être que vous avez inclus des fichiers jar incorrects. J'ai eu le même problème et la raison était que j'avais inclus une bibliothèque JRE par défaut incorrecte dans le chemin de construction du projet. J'avais installé Java avec une autre version et incluais des fichiers JRE de Java avec une version différente. (J'avais installé JRE 1.6 dans mon système et j'avais la bibliothèque JRE 1.7 incluse dans le chemin de construction en raison de Java précédemment installé) Vous pouvez peut-être vérifier si la bibliothèque JRE que vous avez incluse dans le chemin de construction est de version correcte, c'est-à-dire. de la version Java que vous avez installée sur votre système.

priti
la source
2

J'ai rencontré ce problème sur Eclipse Juno, la cause principale était que, bien que certains pots de printemps aient été inclus par des dépendances maven transitoires, ils étaient inclus dans des versions incorrectes.

Vous devriez donc vérifier si vous utilisez un framework modulaire comme spring que tous les modules (ou du moins les plus importants: core, beans, context, aop, tx, etc.) sont dans la même version.

Pour résoudre le problème, j'ai utilisé des exclusions de dépendances maven pour éviter une version incorrecte des dépendances transitoires.

Nicolas Barrera
la source
2

Erreur: la hiérarchie du type "nom de classe" est une erreur incohérente.

solution: la classe OtherDepJar {} -> est dans "other.dep.jar" .

La classe DepJar étend OtherDepJar {} -> est à l'intérieur de "dep.jar" .

class ProblematicClass étend DepJar {} -> est à l'intérieur du projet en cours.

Si dep.jar est dans le chemin de classe du projet, mais que other.dep.jar n'est pas dans le chemin de classe du projet, Eclipse affichera le message "La hiérarchie du type ... est une erreur incohérente"

vijay mp
la source
1

Pour moi, le problème était dû à de mauvaises importations. En fait, il faut mettre à jour les importations après avoir ajouté la bibliothèque de support v7.

Il peut être corrigé en procédant comme suit, pour chaque classe de votre projet :

  1. Supprimer toutes les lignes avec import android.[*], dans chaque classe
  2. Réorganisez vos importations: dans le menu contextuel sélectionnez Source / Organiser les importations ou (CTRL + SHIFT + O)
  3. Lorsque vous y êtes invité, sélectionnez les bibliothèques android.support.[*](et non android.[*]).
Luca Fagioli
la source
1

C'était certainement parce qu'il manquait des dépendances qui n'étaient pas dans mon maven pom.xml.

Par exemple, je voulais créer des tests d'intégration pour mon implémentation du site de démonstration de commerce électronique à larges feuilles.

J'avais inclus un pot à feuilles larges avec des tests d'intégration du commerce à feuilles larges afin de réutiliser leurs fichiers de configuration et leurs classes de test de base. Ce projet avait d'autres dépendances de test que je n'avais pas incluses et j'ai reçu l'erreur «hiérarchie incohérente».

Après avoir copié les "dépendances de test" de broadleaf / pom.xml et les variables de propriétés associées qui fournissaient les versions pour chaque dépendance dans broadleaf / pom.xml, l'erreur a disparu.

Les propriétés étaient:

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

Les dépendances étaient:

<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
la source
1

Si la classe étendue rencontre le problème, le message d'erreur ci-dessus s'affiche.

Exemple

class Example extends Example1 {

}

résoudre les problèmes dans Example1

user3195324
la source
1

J'ai eu exactement le même marqueur de problème et je l'ai résolu en supprimant l'annotation @Override d'une méthode qui était en fait la première implémentation (la "super" étant une méthode abstraite) et non une substitution.

Laurenţiu Lozan
la source
1

Dans mon cas, les références d'importation dans de nombreuses classes contenaient un mot supplémentaire. Je l'ai résolu en éditant tous les fichiers pour avoir les importations correctes. J'ai commencé à faire les modifications manuellement. Mais quand j'ai vu le motif, je l'ai automatisé avec une trouvaille .. remplacer dans l'éclipse. Cela a résolu l'erreur.

CodeMed
la source
0

Pour moi, cela changeait le niveau d'API Android en un niveau avec les API Google

Fernando Gallego
la source
0

J'avais aussi ce problème ... J'ai découvert que la hiérarchie de la classe qui lançait cette exception ne peut pas être retracée jusqu'à sa classe racine par eclipse ... J'explique:

Dans mon cas, j'ai 3 projets java: A, B et C ... où A et B sont des projets maven et C un projet java eclipse régulier ...

Dans le projet A, j'ai l'interface "interfaceA" ... Dans le projet B, j'ai l'interface "interfaceB" qui étend "interfaceA" Dans le projet C, j'ai la classe concrète "classC" qui implémente "interfaceB"

Le "projet C" incluait le "projet B" dans son chemin de construction mais pas le "projet A" (donc c'était la cause de l'erreur) .... Après avoir inclus le "projet A" dans le chemin de construction de "C" , tout est revenu à la normale ...

Voie Carlitos
la source
0

J'avais une classe qui étend LabelProvider dans un projet avec OSGi, là l'erreur s'est produite. La solution était la suivante: Ajouter org.eclipse.jface aux plugins requis dans le manifest.mf au lieu d'importer les packages uniques comme org.eclipse.jface.viewers

Harry Siebert
la source
0

si vous importez simplement le projet eclipse 1. Accédez au paramètre de chemin de construction java sous les propriétés du projet. 2. Dans le cas où la bibliothèque système JRE a un signe d'erreur attaché, double-cliquez dessus pour ouvrir la fenêtre Modifier la bibliothèque 3. Modifiez l'environnement d'exécution pour la version Java correcte du système ou choisissez modifier les autres paramètres en cochant les boutons radio attribuer pour eux. 4. Cliquez sur Terminer

mumbasa
la source
0

Lors de l'importation d'un projet GWT dans Eclipse sans installer "Google Plugin for Eclipse", cela se produit. Après avoir installé "Google Plugin for Eclipse", cette erreur disparaîtra.

À M
la source
0

Cliquez avec le bouton droit sur le dossier du projet et sélectionnez "Java Build Path". Sous "Java Build Path", vous devriez pouvoir voir les bibliothèques. Eclipse affichera des erreurs dans l'une de ces bibliothèques. La résolution de ces problèmes aidera à résoudre le problème.

M. ET
la source
0

J'ai eu cette erreur après avoir fait une fusion git à partir d'une branche où mes classes ont étendu une nouvelle interface. Il suffisait de rafraîchir (F5) l'arborescence des fichiers dans le cadre de l' explorateur de paquets d'Eclipse.

Il semble qu'Eclipse n'ait pas tout mis à jour correctement et que les classes étendaient donc une interface qui n'existait pas encore. Après actualisation, toutes les erreurs ont disparu.

nhaggen
la source
0

J'ai dû passer d'Eclipse Oxygen que j'ai obtenu d'IBM et utilisé IBM JDK 8 vers Eclipse Photon et Oracle JDK 8. Je travaille sur des personnalisations Java pour .

Prédicateur
la source