web-dev-qa-db-fra.com

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

J'ai téléchargé un logiciel open source écrit en Java et essayé de le compiler avec Eclipse . J'ai l'erreur: " La hiérarchie du type 'Nom de classe' est inconsistante " dans certains fichiers . Quelles sont les causes de ces erreurs et comment puis-je les corriger?

127
user1099579

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 fichier JAR qui ne se trouve pas dans le chemin de construction . Vérifiez le chemin d'accès aux classes de votre projet et vérifiez que le fichier jar contenant l'interface ou la classe y figure.

146
LaGrandMere

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

13
Ibolit

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

Les archives de la bibliothèque requise dans le projet ne peuvent pas être lues ...

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

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

Les archives pour la bibliothèque requise dans le projet ne peuvent pas être lues ou ne constituent pas un fichier Zip valide.

Alors au lieu de cela, je les ai ajoutés en tant que "Bocaux externes". Cela a aidé et tous les problèmes de compilation n'étaient plus!

11
Johan Valentin

Vous devez nettoyer le projet ou redémarrer Eclipse.

4
Thuy Nguyen

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.

4
jmst

Un cas de plus que j'ai eu. Indiquez le chemin de projet correct et importez-le dans Eclipse.

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

3
Ashok Chakravarthi

Le problème peut être que vous avez inclus des bocaux incorrects. J'avais le même problème et la raison était que j'avais inclus la bibliothèque JRE par défaut incorrecte dans le chemin de génération 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 sur mon système et la bibliothèque JRE 1.7 était incluse dans le chemin de génération en raison de l'installation préalable de Java) Peut-être pouvez-vous vérifier si la bibliothèque JRE que vous avez incluse dans le chemin de construction est de la version correcte, par exemple. de la version de Java que vous avez installée sur votre système.

2
priti

J'ai rencontré ce problème sur Eclipse Juno. La cause fondamentale en était que, bien que certains bocaux de printemps soient inclus dans des dépendances maven transitoires, ils ont été inclus dans des versions incorrectes.

Donc, vous devriez vérifier si vous utilisez un framework modularisé comme source afin que chaque module (ou au moins le plus important: noyau, beans, contexte, aop, tx, etc.) soit dans la même version.

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

2
Nicolas Barrera

Vous verrez cette erreur au cas où une classe dans votre fichier de bibliothèque que vous avez dans classpath a une référence à une classe non existante qui pourrait ê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.jar et que j'avais étendu une classe à partir de org.springframework.jdbc.core.support.JdbcDaoSupport, qui était dans org.springframework.jdbc-3.1.2.RELEASE.jar de mon classpath.

2
James Jithin

Dans mon cas, les références d'importation dans la plupart des classes contenaient un mot supplémentaire. Je l'ai résolu en modifiant 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 fonction de recherche dans Eclipse Cela a résolu l'erreur.

1
CodeMed

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

Exemple 

class Example extends Example1 {

}

corrigez les problèmes dans Example1

1
user3195324

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

solution: class OtherDepJar {} -> se trouve dans "other.dep.jar" .

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

la classe ProblematicClass étend DepJar {} -> est dans le projet en cours.

Si dep.jar est dans le chemin d'accès aux classes du projet, mais que le fichier other.dep.jar ne l'est pas, Eclipse affichera le message "La hiérarchie du type ... est une erreur incohérente"

1
vijay m p

C’était définitivement parce que des dépendances manquantes qui ne figuraient pas dans mon fichier pom.xml.

Par exemple, je souhaitais créer des tests d’intégration pour la mise en œuvre du site de démonstration broadleaf e-commerce. 

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

Après avoir copié les "dépendances de test" de broadleaf/pom.xml et les variables de propriétés associées fournissant les versions de 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>
1
Bob

Pour moi, le problème était dû à de fausses importations. En fait, il est nécessaire de 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 + MAJ + O)
  3. Lorsque vous y êtes invité, sélectionnez les bibliothèques Android.support.[*] (et non Android.[*]).
1
Black Shell

Faites un clic droit sur le dossier du projet et sélectionnez "Chemin de construction Java". Sous "Chemin de construction Java", 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.

0
MR AND

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. Si un message d'erreur est associé à la bibliothèque système JRE, double-cliquez dessus pour ouvrir la fenêtre Éditer la bibliothèque 3. Modifiez l'environnement d'exécution sur la version Java appropriée du système ou choisissez modifier les autres paramètres en cochant les boutons radio qui leur sont attribués . 4. Cliquez sur Terminer 

0
mumbasa

J'avais 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.

0
Laurenţiu Lozan

Lorsque vous importez un projet GWT dans Eclipse sans installer "Google Plugin for Eclipse", cela se produit. Après l'installation de "Google Plugin for Eclipse", cette erreur disparaîtra.

0
Tom

J'ai eu une classe qui étend LabelProvider dans un projet avec OSGi, là l'erreur s'est produite. La solution était: Ajouter org.Eclipse.jface aux plug-ins requis dans le fichier manifest.mf au lieu d'importer les packages individuels tels que org.Eclipse.jface.viewers

0
Harry Siebert

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 entièrement 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 classique ...

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" (c'était donc la cause de l'erreur) .... Après avoir inclus le "projet A" dans le chemin de construction de "C" , tout est rentré dans l'ordre ...

0
Carlitos Way

Pour moi, il était de changer le niveau de l'API Android à un avec les API de Google

0
Fernando Gallego