Errore di compilazione Eclipse: la gerarchia del tipo "Nome classe" non è coerente


139

Ho scaricato alcuni software open source scritti in Java e ho provato a compilarlo usando Eclipse. Ho ricevuto l'errore: " La gerarchia del tipo" Nome classe "è incoerente " in alcuni file. Cosa causa questi errori e come posso ripararli?

Risposte:


161

Significa che stai tentando di implementare un'interfaccia inesistente o stai estendendo una classe inesistente.

Prova ad aggiornare Eclipse.

Se non funziona, potrebbe significare che hai un riferimento a un JAR che non si trova nel percorso di compilazione. Controlla il percorso di classe del tuo progetto e verifica che sia presente il jar contenente l'interfaccia o la classe.


2
Insieme allo stesso vano, avevo una dipendenza Maven che stava causando questo errore in Spring Tool Suite, la soluzione era quella di fare un Maven> Download Sourcesulla dipendenza in questione.
MrLore

complimenti a te @lagrantmere
Shailesh Pratapwar il

2
Controlla anche che il genitore venga compilato. Nel mio caso sapevo che la superclasse esisteva, ma in realtà non veniva compilata correttamente.
Joseph Rajeev Motha,

2
Avevo una classe che estendeva una classe astratta che stava implementando un'interfaccia mancante (rinominata da eclissi)
Aquarius Power

4
Nel mio caso stavo estendendo una classe che era nel percorso di classe (un vaso), ma estendeva una terza classe che si trovava in un vaso diverso che non era nel mio percorso di classe.
JustinKSU,

15

A volte succede quando aggiungi un barattolo di cui hai bisogno, ma non includi i barattoli di cui ha bisogno. Nel mio caso l'aggiunta di tutti i vasetti in tomcat / lib mi ha aiutato a risolvere questo problema. Sto lavorando a un'app Web.


Grazie, questo era il mio problema. Ho incluso le librerie GWT, ma mancava il jar API servlet Java (servlet-api-3.1.jar da Jetty in questo caso).
Jamie,

13

Controlla i tuoi errori (scheda "marcatori"). Ho avuto anche il seguente errore:

L'archivio per la libreria richiesta nel progetto non può essere letto ...

e quando è stato corretto l'errore "incoerente" è scomparso.

In realtà avevo aggiunto dei vasetti al percorso di compilazione, ma per qualche motivo non potevano essere letti con errori

L'archivio per la libreria richiesta nel progetto non può essere letto o non è un file ZIP valido

Quindi invece li ho aggiunti come "vasetti esterni". Ciò ha aiutato e tutti i problemi di compilazione non c'erano più!


5

Ho avuto questo problema dopo aver aggiornato JDK a una nuova versione. Ho dovuto aggiornare i riferimenti alle librerie in Proprietà progetto / Percorso build Java.


4

Un altro caso che ho avuto. Fornisci il percorso del progetto corretto e importalo in Eclipse.

Quindi vai su Progetto -> Pulisci -> Pulisci tutti i progetti.



2

Vedrai questo errore nel caso in cui una classe nel tuo file di libreria che hai nel percorso di classe abbia riferimento a classi inesistenti che potrebbero trovarsi in un altro file jar. Qui, ho ricevuto questo errore quando non l'ho aggiunto org.springframework.beans-3.1.2.RELEASE.jare ho esteso una classe da org.springframework.jdbc.core.support.JdbcDaoSupport, che era nel org.springframework.jdbc-3.1.2.RELEASE.jarmio percorso di classe.


2

Il problema potrebbe essere che hai inserito barattoli errati. Ho avuto lo stesso problema e il motivo era che avevo incluso la libreria JRE predefinita errata nel percorso di compilazione del progetto. Avevo installato Java con un'altra versione e includevo i file JRE di Java con una versione diversa. (Avevo installato JRE 1.6 nel mio sistema e avevo la libreria JRE 1.7 inclusa nel percorso di compilazione a causa di Java precedentemente installato) Potrebbe essere possibile verificare se la libreria JRE che è stata inclusa nel percorso di compilazione è della versione corretta, ad es. della versione Java installata nel sistema.


2

Ho riscontrato questo problema su Eclipse Juno, la causa principale era che sebbene alcuni barattoli a molla fossero inclusi da dipendenze transitorie del forno, erano inclusi in versioni errate.

Quindi dovresti controllare se usi un framework modulare come spring che tutti i moduli (o almeno i più importanti: core, bean, context, aop, tx, ecc.) Siano nella stessa versione.

Per risolvere il problema ho usato esclusioni di dipendenza maven per evitare la versione errata delle dipendenze transitorie.


2

Errore: la gerarchia del tipo "nome classe" è un errore incoerente.

soluzione: class OtherDepJar {} -> è all'interno di "other.dep.jar" .

la classe DepJar estende OtherDepJar {} -> è all'interno di "dep.jar" .

class ProblematicClass estende DepJar {} -> è all'interno del progetto corrente.

Se dep.jar si trova nel percorso di classe del progetto, ma other.dep.jar non è nel percorso di classe del progetto, Eclipse mostrerà "La gerarchia del tipo ... è un errore incoerente"


1

Per me, il problema era dovuto a importazioni errate. In effetti, è necessario aggiornare le importazioni dopo aver aggiunto la libreria di supporto v7.

Può essere risolto nel modo seguente, per ogni classe del tuo progetto :

  1. Elimina tutte le righe con import android.[*] , in ogni classe
  2. Riorganizza le tue importazioni: dal menu di scelta rapida seleziona Origine / Organizza le importazioni o (CTRL + MAIUSC + O)
  3. Quando richiesto, selezionare le librerie android.support.[*](e non android.[*]).

1

È stato sicuramente perché mancavano dipendenze che non erano nel mio pom.xml di maven.

Ad esempio, volevo creare test di integrazione per la mia implementazione del sito dimostrativo di e-commerce a foglia larga.

Avevo incluso un vaso a foglia larga con test di integrazione del commercio a foglia larga al fine di riutilizzare i file di configurazione e le classi di test di base. Quel progetto aveva altre dipendenze di test che non avevo incluso e ho ricevuto l'errore "gerarchia incoerente".

Dopo aver copiato le "dipendenze di test" da broadleaf / pom.xml e le variabili delle proprietà associate che hanno fornito le versioni per ciascuna dipendenza in broadleaf / pom.xml, l'errore è scomparso.

Le proprietà erano:

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

Le dipendenze erano:

<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

Se la classe estesa presenta il problema, verrà visualizzato il messaggio di errore sopra riportato.

Esempio

class Example extends Example1 {

}

risolvere i problemi in Example1


1

Ho avuto lo stesso identico problema e l'ho risolto rimuovendo l'annotazione @Override da un metodo che era in realtà la prima implementazione (quella "super" essendo un metodo astratto) e non una sostituzione.


1

Nel mio caso, i riferimenti di importazione in molte classi contenevano una parola in più. Ho risolto modificando tutti i file per avere le importazioni corrette. Ho iniziato a fare le modifiche manualmente. Ma quando ho visto il modello, l'ho automatizzato con un find..replace in eclipse. Questo ha risolto l'errore.



0

Stavo avendo anche questo problema ... Ho scoperto che la gerarchia della classe che stava lanciando questa eccezione, non può essere ricondotta alla sua classe radice con l'eclissi ... Spiego:

Nel mio caso, ho 3 progetti java: A, B e C ... dove A e B sono progetti maven e C un normale progetto java eclipse ...

Nel progetto A, ho l'interfaccia "interfaccia A" ... Nel progetto B, ho l'interfaccia "interfaccia B" che estende "interfaccia A" Nel progetto C, ho la classe concreta "classC" che implementa "interfacciaB"

Il "progetto C" includeva il "progetto B" nel suo percorso di compilazione ma non il "progetto A" (quindi quella era la causa dell'errore) .... Dopo aver incluso il "progetto A" nel percorso di compilazione di "C" , tutto è tornato alla normalità ...


0

Ho avuto una classe che estende LabelProvider in un progetto con OSGi, lì si è verificato l'errore. La soluzione era: aggiungere org.eclipse.jface ai plugin richiesti in manifest.mf invece di importare i singoli pacchetti come org.eclipse.jface.viewers


0

se stai importando il progetto eclipse solo 1. Vai all'impostazione del percorso di compilazione java sotto le proprietà del progetto. 2. Nel caso in cui alla libreria del sistema JRE sia associato un segno di errore, fare doppio clic su di essa per aprire la finestra Modifica libreria 3. Modificare l'ambiente di esecuzione con la versione java corretta del sistema o selezionare Modifica le altre impostazioni controllando i pulsanti di opzione a loro. 4. Fai clic su Fine


0

Quando si importa un progetto GWT in Eclipse senza installare "Google Plugin per Eclipse", ciò si verificherà. Dopo aver installato "Google Plugin per Eclipse", questo errore scompare.


0

Fare clic con il tasto destro sulla cartella del progetto e selezionare "Java Build Path". Sotto "Java Build Path" dovresti essere in grado di vedere le librerie. Eclipse mostrerà errori in una di quelle librerie. Risolvere il problema aiuterà a risolvere il problema.


0

Ho avuto questo errore dopo aver fatto un po 'di unione git da un ramo in cui le mie classi hanno esteso una nuova interfaccia. È stato sufficiente aggiornare (F5) il File-Tree nel frame Package Explorer di Eclipse.

Sembra che Eclipse non abbia aggiornato tutto correttamente e quindi le classi stessero estendendo un'interfaccia non esistente. Dopo l'aggiornamento, tutti gli errori sono scomparsi.


0

Ho dovuto passare da Eclipse Oxygen che ho ottenuto da IBM e ho utilizzato IBM JDK 8 a Eclipse Photon e Oracle JDK 8. Sto lavorando alle personalizzazioni Java per .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.