Ho scaricato un software open source scritto in Java e ho provato a compilarlo utilizzando Eclipse. Ho ricevuto l'errore: "La gerarchia del tipo 'Nome classe' è incoerente" in alcuni file. Che cosa causa questi errori e come li risolvo?Errore di compilazione di Eclipse: la gerarchia del tipo "Nome classe" è incoerente
risposta
Significa che si sta tentando di implementare un'interfaccia inesistente o si sta estendendo una classe non esistente.
Prova ad aggiornare Eclipse.
Se non funziona, potrebbe significare che si ha un riferimento a un JAR che non si trova nel percorso di generazione. Controllare il percorso di classe del progetto e verificare che il barattolo contenente l'interfaccia o la classe sia incluso.
Controlla i tuoi errori (scheda "marcatori"). Ho avuto anche il seguente errore:
Archive for required library in project cannot be read...
e quando è stato fissato il "incoerente-errore" scomparso.
In realtà avevo aggiunto vasetti al percorso di creazione, ma per qualche motivo non è stato possibile leggere con errore
Archive for required library in project cannot be read or is not a valid ZIP file
Così, invece li ho aggiunto come "Vasi esterni". Questo ha aiutato e tutti i problemi di compilazione non c'erano più!
Si vedrà questo errore nel caso in cui una classe del file della libreria che si ha in classpath faccia riferimento a classi non esistenti che potrebbero trovarsi in un altro file jar. Qui, ho ricevuto questo errore quando non ho aggiunto org.springframework.beans-3.1.2.RELEASE.jar
e ho esteso una classe da org.springframework.jdbc.core.support.JdbcDaoSupport
, che era in org.springframework.jdbc-3.1.2.RELEASE.jar
del mio classpath.
A volte capita quando aggiungi un barattolo di cui hai bisogno, ma non includi i barattoli di cui l'IT ha bisogno. Nel mio caso l'aggiunta di tutti i vasi in tomcat/lib mi ha aiutato a risolvere questo problema. Sto lavorando a un'app web.
Grazie, questo era il mio problema. Ho incluso librerie GWT, ma in questo caso mancava il jar dell'API servlet Java (servlet-api-3.1.jar dal Jetty). – Jamie
Il problema potrebbe essere che sono stati inclusi vasi errati. Ho avuto lo stesso problema e il motivo era che avevo incluso una libreria JRE predefinita errata nel percorso di costruzione del progetto. Avevo installato Java con un'altra versione e includevo file JRE di Java con una versione diversa. (Avevo installato JRE 1.6 nel mio sistema e avevo la libreria 1.7 di JRE inclusa nel percorso di compilazione a causa di Java precedentemente installato) Potresti verificare se la libreria JRE che hai incluso nel percorso di compilazione sia della versione corretta cioè. della versione di Java che hai installato nel tuo sistema.
Ho riscontrato questo problema su Eclipse Juno, la causa principale era che sebbene alcuni vasi primaverili venissero inclusi dalle dipendenze transitori di maven, erano inclusi in versioni errate.
Quindi è necessario verificare se si utilizza un framework modulare come molla che ogni modulo (o almeno il più importante: core, bean, context, aop, tx, ecc.) Sono nella stessa versione.
Per risolvere il problema sono state utilizzate le esclusioni di maven dependence per evitare la versione errata delle dipendenze dei transitori.
Ho avuto questo problema dopo aver aggiornato il JDK a una nuova versione. Ho dovuto aggiornare i riferimenti alle librerie in Project Properties/Java Build Path.
Un altro caso che ho avuto. Assegna il percorso del progetto corretto e importalo in eclissi.
Quindi andare su Progetto -> Pulisci -> Pulisci tutti i progetti.
Per me è stata la modifica del livello di API Android per uno con le API di Google
Per me, il problema era dovuto alle importazioni sbagliate. Di fatto, è necessario aggiornare le importazioni dopo aver aggiunto la libreria di supporto v7.
Può essere fissato facendo come segue, per ogni classe del progetto:
- eliminare tutte le righe con
import android.[*]
, in ogni classe - Riorganizzare le vostre importazioni: dal menu contestuale selezionare Origine/Organizzazione delle importazioni o (CTRL + MAIUSC + O)
- Quando richiesto, selezionare le librerie
android.support.[*]
(e nonandroid.[*]
).
ho avuto anche questo problema ... ho scoperto che la gerarchia della classe che stava gettando questa eccezione, non può essere fatta tutta la via del ritorno alla sua classe radice da Eclipse ... Mi spiego:
Nel mio caso, ho 3 progetti Java: A, B e C ... dove A e B sono progetti maven e C un progetto java eclipse regolare ...
Nel progetto A, ho l'interfaccia "interfacciaA" ... Nel progetto B, ho l'interfaccia "interfacciaB" che estende "interfacciaA" Nel progetto C, ho la classe concreta "classC" che implementa "interfa" ceB "
Il" progetto C "includeva il" progetto B "nel suo percorso di compilazione ma non" progetto A "(quindi era la causa dell'errore) .... Dopo aver incluso" progetto A "all'interno del costruire il percorso di "C", tutto è tornato alla normalità ...
Era sicuramente perché mancavano le dipendenze che non erano nel mio maven pom.xml.
Ad esempio, volevo creare test di integrazione per la mia implementazione del sito demo di e-commerce a foglia larga.
Avevo incluso un barattolo a foglia larga con test di integrazione del commercio a latifoglie per riutilizzare i file di configurazione e le classi di test di base. Quel progetto aveva altre dipendenze di testing 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 di proprietà associate che hanno fornito le versioni per ciascuna dipendenza in broadleaf/pom.xml, l'errore è andato via.
Le proprietà sono:
<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 sono stati:
<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>
ho avuto una classe che estende LabelProvider in un progetto con OSGi, c'è l'errore. La soluzione era: aggiungere org.eclipse.jface ai plugin richiesti nel manifest.mf invece di importare i singoli pacchetti come org.eclipse.jface.viewers
Se la classe estesa presenta il problema, verrà visualizzato il messaggio di errore sopra riportato.
Esempio
class Example extends Example1 {
}
correggere i problemi in Example1
Si consiglia di pulire il progetto, o riavviare Eclipse.
Ho avuto lo stesso identico indicatore del problema e l'ho risolto rimuovendo l'annotazione @ Override da un metodo che era in effetti la prima implementazione (il "super" è un metodo astratto) e non un override.
Nel mio caso, i riferimenti di importazione in molte delle classi contenevano una parola in più. L'ho risolto modificando tutti i file per avere le importazioni corrette. Ho iniziato a fare le modifiche manualmente. Ma quando ho visto il pattern, l'ho automatizzato con un find..replace in eclissi. Questo ha risolto l'errore.
se si sta importando il progetto eclipse solo 1. Passare all'impostazione del percorso di generazione java sotto le proprietà del progetto. 2. Nel caso in cui la libreria del sistema JRE abbia un segno di errore allegarlo doppio clic per aprire la finestra Modifica libreria 3. Modificare l'ambiente di esecuzione sulla versione java corretta del sistema o scegliere modificare le altre impostazioni controllando la radio i pulsanti si assegnano a loro. 4. Fare clic su Fine
Errore: la gerarchia del tipo "nome classe" è un errore incoerente.
soluzione: classe OtherDepJar {} -> è dentro "other.dep.jar".
classe DepJar estende OtherDepJar {} -> è dentro "dep.jar".
classe ProblematicClass estende DepJar {} -> è all'interno del progetto corrente.
Se dep.jar è nel classpath del progetto, ma non è other.dep.jar nel classpath del progetto, Eclipse mostrerà la "La gerarchia del tipo ... è errore incoerente"
Quando l'importazione di un progetto GWT in Eclipse senza installare "Google Plugin per Eclipse", si verificherà. Dopo aver installato "Google Plugin per Eclipse", questo errore scompare.
- 1. La gerarchia di tipo Classe è incoerente
- 2. Eclipse La gerarchia del tipo ... è incoerente con l'annotazione @Configurable
- 3. Eclipse Luna - AutoIndent è incoerente
- 4. IDE Eclipse - La gerarchia di chiamate aperte è vuota/danneggiata
- 5. Eclipse tipo gerarchia non sempre lavorando
- 6. C++ Errore di compilazione: è inizializzatore ma tipo incompleto
- 7. Errore CS0051 (accessibilità incoerente: il tipo di parametro "Lavoro" è meno accessibile del metodo "AddJobs.TotalPay (Job)")
- 8. incoerente l'accessibilità: Tipo di proprietà è meno accessibile
- 9. Stampa la gerarchia di eccezione/errore Python
- 10. F errore # compilazione: tipo di applicazione imprevisto
- 11. Accessibilità incoerente: la classe base è meno accessibile della classe
- 12. Perché la richiesta invokevirtual di Java per risolvere la classe di compilazione del metodo chiamato?
- 13. estendere la classe base concreta di gerarchia
- 14. IDEA equivalente di "gerarchia di tipi" di Eclipse (F4)?
- 15. La gerarchia delle attività di tipo non è coerente quando si estende ActionBarActivity
- 16. Avvertenza relativa classe di tipo non gestita durante la compilazione
- 17. Qual è la cronologia dietro la classe di tipo Functor?
- 18. Errore di compilazione Maven all'accensione di enum
- 19. La compilazione di Android è lenta (usando Eclipse)
- 20. Come ispezionare la gerarchia di classi di Python?
- 21. errore C2011: '': 'classe del tipo' ridefinizione
- 22. Collegamento per vedere la gerarchia delle classi in Eclipse
- 23. Accessibilità incoerente: classe base è meno accessibile classe
- 24. Errore di compilazione del pacchetto Maven
- 25. Errori di compilazione di Scala + Eclipse misteriosi
- 26. In Eclipse, nella gerarchia di chiamate, è possibile espandere tutto?
- 27. Gerarchia di buone chiamate in Eclipse/PyDev
- 28. Errore di compilazione del progetto di compilazione TeamCity
- 29. Ordina array di oggetti con la gerarchia di gerarchia e nome
- 30. Come funziona la compilazione di una classe?
Analogamente, ho avuto una dipendenza Maven che causava questo errore in Spring Tool Suite, la soluzione era eseguire un 'Maven'>' Download Source' sulla dipendenza in questione. – MrLore
complimenti per te @lagrantmere – Shinchan
Controlla anche che il genitore venga compilato. Nel mio caso sapevo che esisteva la superclasse, ma in realtà non era stata compilata correttamente. –