Erro do Eclipse: indiretamente referenciado a partir dos arquivos .class necessários?


185

Eu recebi um erro no Eclipse. O que essa mensagem de erro significa:

O tipo iglu.ir.TermVector não pode ser resolvido. É indiretamente referenciado a partir de arquivos .class necessários


21
Adicione o jar que contém iglu.ir.TermVector no caminho de origem do seu projeto.
Harry Joy

2
Se você tem certeza de que a classe é fornecida, tente uma limpeza e atualização em todos os seus projetos
Mirco

Isto aconteceu-me por causa das dependências transitivas em meus jarros
Janac Meena

exatamente! esse jar precisa estar presente nas dependências do pom.xml.
gaurav 29/01

Respostas:


193

Significa: "Uma classe que você usa precisa de outra classe que não esteja no caminho de classe". Você deve certificar-se (como sugere Harry Joy) de adicionar o jar necessário ao caminho da classe.


3
Resposta universal e simples que me ajuda muito em casos diferentes :) THX #
Mariusz Chw

Ao tentar remover classes em particular, verifique as classes pai para obter referência ao tipo ausente. Se nem sempre é o que essa mensagem significa, é o que significa provavelmente na maioria das vezes.
butallmj

Sim, eu achei que era devido a alguns frascos ausentes nos frascos referenciados :) Obrigado.
Ali Imran

21
@Arne, Por que diz indiretamente referenciado então? Não deveria ter dito que ele é não referenciada em tudo?
Pacerier

2
@ Pacerier que não seria verdade. Não é o seu código que faz referência direta a esse tipo, mas algo que seu código usa; portanto, a dependência do seu código para esse tipo é "apenas" transitiva, mas existe. "Indiretamente" indica onde procurar.
hiergiltdiestfu

22

É provável que o Eclipse fique confuso, pois é um erro real. Ignorei o erro e executei o serviço da Web cujo endpointInterface ele se queixava e funcionava bem, exceto por ter que lidar com o diálogo toda vez que eu queria executá-lo. Apenas mais um erro opaco que não me diz nada.


Também não está em uma jarra. Está em um dos projetos incluídos em todos os projetos incluídos, onde é de alguma relevância.
Jerry Miller

3
Eu experimentei esse problema no eclipse, mas a construção via maven funcionou bem. A correção foi excluir e reimportar o projeto no espaço de trabalho do eclipse que continha as classes necessárias.
PiersyP:

Isso pode acontecer algumas vezes, mas eu encontrei erros que dão a mesma resposta, e o projeto não pode ser construído.
Christopher Connery

13

Às vezes acontece comigo: sempre consertei isso com o comando "mvn eclipse: clean" para limpar propriedades antigas e, em seguida, execute o mvn eclipse: eclipse -Dwtpversion = 2.0 (para o projeto da Web, é claro). Existem algumas propriedades antigas salvas, portanto o eclipse às vezes é confuso.


Limpei o projeto (de Projeto-> Limpo ...) e funcionou.
Anu Shibin Joseph Raj

mvn eclipse:cleane / ou mvn eclipse:eclipseparecem ser o truque de mágica para fazê-lo funcionar.
Antoine Martin

13

Eu tive esse erro por causa de um repositório maven local corrompido .

Portanto, para corrigir o problema, tudo o que eu precisava fazer era ir ao meu repositório e excluir a pasta onde estava o .jar em questão e forçar um update mavenno Eclipse.


1
Isso funcionou para mim, enquanto o acima de tudo não. O problema ocorreu quando um dos meus colegas de equipe atualizou a versão de um repositório do pom.
IAL

8

Parece que este foi um problema conhecido (Bug 67414) que foi resolvido no 3.0 ... alguém comentou que está ocorrendo para eles no 3.4 também.

Nesse meio tempo, a solução alternativa é remover a Biblioteca do Sistema JRE do projeto e adicioná-la novamente.

Here are the steps:

Vá para as propriedades do projeto com o erro de construção (clique com o botão direito do mouse em> Propriedades)

Veja a guia "Bibliotecas" na seção "Caminho da construção"

Localize a "Biblioteca do sistema JRE" na lista (se isso estiver faltando, essa mensagem de erro não será um bug do eclipse, mas um projeto mal configurado)

Remova a "Biblioteca do sistema JRE"

Clique em "Adicionar biblioteca ...", selecione "Biblioteca do sistema JRE" e adicione o JRE apropriado para o projeto (por exemplo, 'JRE padrão da área de trabalho')

Pressione "Concluir" na seleção da biblioteca e "OK" nas propriedades do projeto e aguarde a reconstrução do projeto.

Espero que o erro seja resolvido ...


Sim. Eu tive o mesmo problema com o spring-web-3.0.1.RELEASE.Ele foi registrado como uma dependência no pom.xml e já estava funcionando como uma dependência em algumas referências quando fiz um http.csrf (). desativar (). cors (). desativar (). httpBasic (). e (). authorizeRequests () .antMatchers (PUBLIC_MATCHERS) .permitAll (). anyRequest (). authenticated (); Em seguida, baixei o arquivo jar e importe-o da maneira manual tradicional.
Tsakiroglou Fotis

5

Este erro ocorre quando as classes no arquivo jar não seguem a mesma estrutura da estrutura de pastas do jar.

por exemplo, se o arquivo de classe tiver o pacote com.test.exam e o classes.jar criado a partir desse arquivo de classe tiver a estrutura test.exam ..., o erro será gerado. Você precisa corrigir a estrutura do pacote do seu classes.jar e incluí-la no caminho de construção do ecplipse ...


4

Eu recebi essa exceção porque o eclipse estava trabalhando em uma versão diferente do jdk, apenas alterada para a correta, limpa e compilada e funcionou!


3

Eu tive um caso interessante desse problema com o Eclipse 4.4.2. Meu projeto (P1) referenciou uma classe externa (projeto P2) com dois métodos com o mesmo nome, mas diferentes tipos de argumento:

public static void setItem(Integer id) …
public static void setItem(Item item) …

O tipo Itemestava contido em um terceiro projeto P3, que eu não queria que fosse visível aqui. P1 chamou apenas o primeiro método:

ExternalClass.setItem(Integer.valueOf(12345));

Portanto, o segundo método, que usou a Itemclasse, não foi usado, e é verdade que P3 não estava no caminho da classe de compilação - por que deveria, se não for usado.

Ainda Eclipse me disse

The type ...Item cannot be resolved.
It is indirectly referenced from required .class files

A compilação a partir da linha de comando não produziu nenhum desses problemas. Alterar o nome do segundo método (não utilizado aqui!) Também fez o problema desaparecer no Eclipse.


2
Estou enfrentando exatamente o mesmo problema com o Eclipse Photon Release (4.8.0)
Delphin

3

O que foi corrigido para mim foi right clicking on project > Maven > Update Project


2

Se você ainda não encontrar nada de errado com sua configuração, tente o Projeto -> Limpar e limpe todos os projetos na área de trabalho.

EDIT: Desculpe, não vi a sugestão de verbose_mode ... mesma coisa


2

Para mim, isso acontece quando eu atualizo meu jdk para 1.8.0_60, pois meu antigo conjunto de frascos foi usado por muito tempo. Se eu voltar ao jdk1.7.0_25, todos esses problemas se foram. Parece um problema sobre a compatibilidade entre o JRE e as bibliotecas.


1

Eu recebi o erro quando apenas alterei algumas configurações de svn e não nada no código. Apenas a limpeza dos projetos corrigiu o erro.


1

No meu caso, criei um projeto e fiz o seu minSdkVersion=9e targetSdkVersion=17. Eu usei gerado automaticamente libs/android-support-v4.jar. Eu também tive que fazer uso do ActionBarActivityuso android-support-v7-appcomapt.jar. Então, eu apenas copiei o android-support-v7-appcompat.jararquivo da android-sdk/extras/andrid/support/v7/appcompat/libspasta e colei na minha libspasta do projeto . E isso causou o erro acima. Então, basicamente, eu precisava colocar o android-support-v4.jararquivo android-sdk/extras/andrid/support/v7/appcompat/libstambém na minha libspasta do projeto . De acordo com meu conhecimento, o v7.jararquivo tinha dependências no v4.jararquivo. Então, ele precisava do próprio v4.jararquivo, em vez do meu projeto, criou automaticamente o v4.jararquivo.


1

Rapidamente e com simplicidade, eu o corrigi dessa maneira (eu uso a versão ADT: v21.0.0-531062 no Windows XP home edition)

  1. Arquivo de manifesto aberto.
  2. Alterou o projeto existente minSdkVersion para o mesmo valor que maxSdkVersion (aviso: pode ser bom criar um novo projeto e ver o que é maxSdkVersion)
  3. Salve o arquivo de manifesto.
  4. Clique com o botão direito do mouse no projeto e selecione Build Project.
  5. No menu superior: Projeto - Limpar .. - marque Apenas o projeto relevante, abaixo de eu marquei Iniciar uma compilação imediatamente e Crie apenas os projetos selecionados e OK.
  6. abra o arquivo java - SEM erros vermelhos!
  7. Volte para a etapa 1 acima e altere Voltar minSdkVersion para o valor original (para suprimir o máximo de versão do Android possível).

Funcionou, mas o problema retorna a cada poucos dias. Eu faço o mesmo que acima e ele resolve e me permite desenvolver.


0

Além da causa já sugerida de falta de um arquivo de classe, esse erro também pode indicar um arquivo de classe duplicado, o eclipse relata esse erro quando um arquivo de classe no caminho da construção usa outra classe que possui várias definições no caminho da construção.


0

Como você nos fornece muito poucos detalhes, provavelmente o que você fez, que é um erro incrivelmente fácil de cometer, é que, em vez de ir para

Build Path > Configure Build Path > Projects

e adicionando sua pasta de projeto adicional a partir daí, você foi para

Build Path > Configure Build Path > Libraries

e adicionou sua pasta do projeto a partir daí.

Esse é definitivamente o caso, se seu código estiver correto, mas após a reorganização automática das importações via ctrl+space atalho, em vez de suas instruções de importação se referirem a com.your.additionalproject, todas as suas referências apontam para bin.com.your.additionalproject.

Observe a bandeja. Isso significa que você está indiretamente se referindo à sua classe, tratando a outra estrutura de pastas do projeto como uma biblioteca, fazendo com que o IDE faça todo o trabalho de encontrar a classe binária exata à qual você está se referindo.

Para corrigir isso, remova a pasta das Bibliotecas e adicione-a na guia Projetos e reorganize suas importações. Seu projeto deve funcionar bem.


0

Quando eu uso uma nova versão do eclipse e tento usar o espaço de trabalho anterior que eu usei na versão antiga do eclipse, esse erro ocorreu.

Aqui está como eu resolvo o problema:

Clique com o botão direito do mouse no meu projeto no Package Explorer -> Propriedades -> Caminho de Construção Java -> Bibliotecas -> Eu vejo um erro (sinal cruzado) na Biblioteca do Sistema JRE. Porque o caminho não pode ser encontrado. -> Clique duas vezes na Biblioteca do sistema JRE -> Selecione a opção "JRE padrão da área de trabalho" -> Concluir -> OK. -> BUM, ESTÁ FUNCIONANDO

PARA SUA INFORMAÇÃO.


0

No meu caso, foi o resultado de adicionar uma nova dependência ao meu pom.xmlarquivo.

A nova dependência dependia de uma versão antiga de uma biblioteca (2.5). Essa mesma biblioteca foi exigida por outra biblioteca no meupom.xml , mas exigiu a versão 3.0.

Por alguma razão, quando o Maven encontra esses conflitos, simplesmente omite a versão mais recente. No Eclipse, ao visualizar, pom.xmlvocê pode selecionar a guia "hierarquia de dependências" na parte inferior para ver como as dependências são resolvidas. Aqui você encontrará se a biblioteca (e, portanto, a classe) em questão foi omitida por esse motivo.

No meu caso, era tão simples quanto bloquear a versão mais recente. Você pode fazer isso clicando com o botão direito do mouse na entrada - existe uma opção para bloqueá-la no menu de contexto.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.