Erro de compilação do Eclipse: A hierarquia do tipo 'Nome da classe' é inconsistente

139

Fiz o download de algum software de código aberto escrito em Java e tentei compilá-lo usando o Eclipse. Eu recebi o erro: " A hierarquia do tipo 'Nome da classe' é inconsistente " em alguns arquivos. O que causa esses erros e como corrigi-los?

user1099579
fonte

Respostas:

161

Isso significa que você está tentando implementar uma interface inexistente ou está estendendo uma classe inexistente.

Tente atualizar seu Eclipse.

Se não funcionar, pode significar que você tem uma referência a um JAR que não está no caminho de construção. Verifique o caminho de classe do seu projeto e verifique se o jar que contém a interface ou a classe está nele.

LaGrandMere
fonte
2
No mesmo sentido, eu tinha uma dependência do Maven que estava causando esse erro no Spring Tool Suite, a solução era fazer uma Maven> Download Sourcena dependência em questão.
precisa
parabéns para você @lagrantmere
Shailesh Pratapwar
2
Verifique também se o pai está sendo compilado. No meu caso, eu sabia que a superclasse existia, mas na verdade não estava sendo compilada corretamente.
Joseph Rajeev Motha 21/03
2
Eu tive uma classe estender uma classe abstrata que foi a implementação de uma interface de falta (renomeado fora do eclipse)
Aquarius Poder
4
No meu caso, eu estava estendendo uma classe que estava no caminho da classe (uma jarra), mas ela estendia uma terceira classe que estava em uma jarra diferente que não estava no meu caminho de classe.
JustinKSU
15

Às vezes, acontece quando você adiciona um jar de que você precisa, mas não inclui os jarros necessários para a TI. No meu caso, adicionar todos os frascos no tomcat / lib me ajudou a resolver esse problema. Estou trabalhando em um aplicativo da web.

Ibolit
fonte
Obrigado, este foi o meu problema. Incluí bibliotecas GWT, mas estava faltando o jar da API do servlet Java (neste caso, servlet-api-3.1.jar do Jetty).
Jamie
13

Verifique seus erros (guia "marcadores"). Eu também tive o seguinte erro:

O arquivamento da biblioteca necessária no projeto não pode ser lido ...

e quando isso foi corrigido, o "erro inconsistente" desapareceu.

Na verdade, eu adicionei jars ao caminho da compilação, mas por algum motivo eles não puderam ser lidos com erro

O arquivamento da biblioteca necessária no projeto não pode ser lido ou não é um arquivo ZIP válido

Então, em vez disso, eu os adicionei como "Jars externos". Isso ajudou e todos os problemas de compilação não existiam mais!

Johan Valentin
fonte
5

Eu tive esse problema depois de atualizar o JDK para uma nova versão. Eu tive que atualizar as referências às bibliotecas em Project Properties / Java Build Path.

jmst
fonte
4

Mais um caso que tive. Forneça o caminho correto do projeto e importe-o para eclipse.

Em seguida, vá para Projeto -> Limpar -> Limpar todos os projetos.

Ashokchakravarthi Nagarajan
fonte
4

Você deve limpar o projeto ou reiniciar o Eclipse.

Thuy Nguyen
fonte
2

Você verá esse erro no caso de uma classe no seu arquivo de biblioteca de alguma classe ter referência a classes inexistentes que poderiam estar em outro arquivo jar. Aqui, recebi esse erro quando não adicionei org.springframework.beans-3.1.2.RELEASE.jare estendi uma classe de org.springframework.jdbc.core.support.JdbcDaoSupport, que estava no org.springframework.jdbc-3.1.2.RELEASE.jarmeu caminho de classe.

James Jithin
fonte
2

O problema pode ser que você incluiu frascos incorretos. Eu tive o mesmo problema e o motivo foi que incluíra a biblioteca JRE padrão incorreta no caminho de construção do projeto. Eu havia instalado o Java com outra versão e estava incluindo arquivos JRE do Java com uma versão diferente. (Eu instalei o JRE 1.6 no meu sistema e estava tendo a biblioteca JRE 1.7 incluída no caminho de construção devido ao Java instalado anteriormente) Pode ser que você possa verificar se a biblioteca JRE que você incluiu no caminho de construção é da versão correta, por exemplo. da versão Java que você instalou em seu sistema.

priti
fonte
2

Eu tive esse problema no Eclipse Juno, a causa principal foi que, embora alguns jarros de mola estivessem sendo incluídos por dependências temporárias temporárias, eles foram incluídos em versões incorretas.

Portanto, você deve verificar se, usando uma estrutura modularizada como primavera, todos os módulos (ou pelo menos os mais importantes: núcleo, beans, contexto, aop, tx etc.) estão na mesma versão.

Para resolver o problema, usei exclusões de dependência não autorizada para evitar a versão incorreta das dependências transitórias.

Nicolas Barrera
fonte
2

Erro: a hierarquia do tipo "nome da classe" é um erro inconsistente.

solução: a classe OtherDepJar {} -> está dentro de "other.dep.jar" .

a classe DepJar estende OtherDepJar {} -> está dentro de "dep.jar" .

classe ProblematicClass estende DepJar {} -> está dentro do projeto atual.

Se dep.jar estiver no caminho de classe do projeto, mas other.dep.jar não estiver no caminho de classe do projeto, o Eclipse mostrará "A hierarquia do tipo ... é um erro inconsistente"

vijay mp
fonte
1

Para mim, o problema ocorreu devido a importações incorretas. De fato, é necessário atualizar as importações depois de adicionar a biblioteca de suporte v7.

Pode ser corrigido da seguinte maneira, para cada classe do seu projeto :

  1. Exclua todas as linhas com import android.[*], em cada classe
  2. Reorganize suas importações: no menu de contexto, selecione Origem / Organizar importações ou (CTRL + SHIFT + O)
  3. Quando solicitado, selecione as bibliotecas android.support.[*](e não android.[*]).
Luca Fagioli
fonte
1

Definitivamente, porque faltava dependências que não estavam no meu maven pom.xml.

Por exemplo, eu queria criar testes de integração para minha implementação do site de demonstração de comércio eletrônico de folha larga.

Eu incluí um pote de folha larga com testes de integração do comércio de folha larga para reutilizar seus arquivos de configuração e classes de teste base. Esse projeto tinha outras dependências de teste que eu não incluí e recebi o erro "hierarquia inconsistente".

Após copiar as "dependências de teste" do broadleaf / pom.xml e as variáveis ​​de propriedades associadas que forneceram as versões para cada dependência no broadleaf / pom.xml, o erro foi eliminado.

As propriedades foram:

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

As dependências foram:

<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>
Prumo
fonte
1

Se a classe estendida tiver o problema, a mensagem de erro acima será exibida.

Exemplo

class Example extends Example1 {

}

corrija os problemas em Example1

user3195324
fonte
1

Eu tinha o mesmo marcador exato do problema e o resolvi removendo a anotação @Override de um método que era de fato a primeira implementação (a "super" sendo um método abstrato) e não uma substituição.

Laurenţiu Lozan
fonte
1

No meu caso, as referências de importação em muitas das classes continham uma palavra extra. Eu o resolvi editando todos os arquivos para ter as importações corretas. Comecei a fazer as edições manualmente. Mas quando vi o padrão, eu o automatizei com um achado ... substituir no eclipse. Isso resolveu o erro.

CodeMed
fonte
0

Para mim, estava mudando o nível da API do Android para um com as APIs do Google

Fernando Gallego
fonte
0

Eu também estava com esse problema ... Descobri que a hierarquia da classe que estava lançando essa exceção não pode ser rastreada até a sua classe raiz pelo eclipse ... Explico:

No meu caso, eu tenho 3 projetos java: A, B e C ... onde A e B são projetos automatizados e C um projeto regular de eclipse java ...

No projeto A, tenho a interface "interfaceA" ... No projeto B, tenho a interface "interfaceB" que estende "interfaceA" No projeto C, tenho a classe concreta "classC" que implementa "interfaceB"

O "projeto C" estava incluindo o "projeto B" em seu caminho de construção, mas não o "projeto A" (portanto, foi a causa do erro) .... Depois de incluir o "projeto A" dentro do caminho de construção de "C" , tudo voltou ao normal ...

Carlitos Way
fonte
0

Eu tive uma classe que estende LabelProvider em um projeto com OSGi, aí ocorreu o erro. A solução foi: Incluindo org.eclipse.jface nos plugins necessários no manifest.mf em vez de importar pacotes únicos como org.eclipse.jface.viewers

Harry Siebert
fonte
0

se você estiver importando o projeto eclipse, apenas 1. Vá para a configuração do caminho de construção java nas propriedades do projeto. 2. Caso a biblioteca JRE System tenha um sinal de erro anexado, clique duas vezes nela para abrir a janela Edit library 3. Altere o ambiente de execução para a versão java correta do sistema ou escolha editar as outras configurações verificando os botões de opção atribuídos para eles. 4. Clique em Concluir

mumbasa
fonte
0

Ao importar um projeto GWT no Eclipse sem instalar o "Google Plugin for Eclipse", isso ocorrerá. Após a instalação do "Google Plugin for Eclipse", esse erro desaparecerá.

Tom
fonte
0

Clique com o botão direito do mouse na pasta do projeto e selecione "Java Build Path". Em "Java Build Path", você poderá ver as bibliotecas. O Eclipse mostrará erros em qualquer uma dessas bibliotecas. A correção desses problemas ajudará a resolvê-los.

SENHOR E
fonte
0

Eu tive esse erro depois de fazer uma mesclagem git de um ramo em que minhas classes estenderam uma nova interface. Foi o suficiente para atualizar (F5) a árvore de arquivos no quadro Package Explorer do Eclipse.

Parece que o Eclipse não atualizou tudo corretamente e, portanto, as classes estavam estendendo uma interface ainda não existente. Após a atualização, todos os erros desapareceram.

nhaggen
fonte
0

Eu tive que mudar do Eclipse Oxygen que obtive da IBM e usei o IBM JDK 8 para Eclipse Photon e Oracle JDK 8. Estou trabalhando em customizações Java para .

Pregador
fonte