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?
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?
Respostas:
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.
À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.
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!
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.
Você deve limpar o projeto ou reiniciar o Eclipse.
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.
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.
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.
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"
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 :
import android.[*], em cada classeandroid.support.[*](e não android.[*]).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>
Se a classe estendida tiver o problema, a mensagem de erro acima será exibida.
Exemplo
class Example extends Example1 {
}
corrija os problemas em Example1
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.
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.
Para mim, estava mudando o nível da API do Android para um com as APIs do Google
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 ...
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
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
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.
Maven>Download Sourcena dependência em questão.