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

karikari
fonte
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.

Arne Deutsch
fonte
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.

Jerry Miller
fonte
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.

Mário Kapusta
fonte
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.

Xavier Portebois
fonte
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 ...

NPKR
fonte
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 ...

Mayur
fonte
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!

Orlando Valencia
fonte
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.

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

Eduardo Dennis
fonte
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

Denis
fonte
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.

Ming Leung
fonte
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.

user2774465
fonte
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.

laaptu
fonte
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.

user3445991
fonte
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.

MilesHampson
fonte
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.

steelmonkey
fonte
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.

oiyio
fonte
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.

Chris Staikos
fonte
0

Aponte o JRE no caminho Build para um JDK. Isso funcionou para mim.

Neeleshkumar S
fonte