A inspeção IntelliJ fornece "Não é possível resolver o símbolo", mas ainda compila o código

569

Plataforma: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
SO: Windows 7

Então, eu tenho uma situação estranha com o IntelliJ que me deixa completamente perplexo. Configurei um projeto Maven e adicionei log4j como uma dependência no arquivo pom.xml. As inspeções da IDEA funcionam bem e minha unidade testa todos os compilar e executar.

Em seguida, adicionei a biblioteca jmime da hunnysoft ao meu repositório maven local usando o arquivo mvn install: install-file da seguinte maneira.

mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar

O Maven instalou o arquivo jar muito bem no meu repositório local.

Fui então para Configurações do IntelliJ => Maven => Serviços de repositório e atualizei meu repositório local (para que o IntelliJ reindexasse o conteúdo do repositório).

Por fim, adicionei a seguinte dependência ao meu arquivo pom.xml (logo acima da dependência do log4j).

<dependency>
    <groupId>jmime</groupId>
    <artifactId>jmime</artifactId>
    <version>3.1.1e</version>
</dependency>

Agora crio uma nova classe da seguinte maneira:

package com.stackoverflow.question;

import org.apache.log4j.Logger;
import com.hunnysoft.jmime.ByteString;
import com.hunnysoft.jmime.Field;
import com.hunnysoft.jmime.FieldBody;

public class StackOverflowQuestion {
    public Field create(String name, String text) {
        Logger.getLogger(getClass()).debug("create entered");
        FieldBody body = new FieldBody();
        body.setText(new ByteString(text));
        Field field = new Field();
        field.setFieldName(name);
        field.setFieldBody(body);
        return field;
    }
}

Agora, para a estranheza. O mecanismo de intenção do IntelliJ capta e reconhece perfeitamente a importação do Logger no arquivo maven pom. No entanto, para todas as importações da hunnysoft, ele reporta: "Não é possível resolver o símbolo 'ByteString / Field / FieldBody'", MAS Compilar => Compilar 'StackOverflowQuestion.java' compila tudo corretamente e o teste de unidade que criei para esta classe funciona bem (embora as intenções marcam a chamada para create () também como uma área problemática).

Então, em algum lugar, de alguma forma, o IntelliJ está ignorando o arquivo jmime.jar para o subsistema de intenção. Estou confuso porque a dependência do log4j funciona bem e tudo compila e funciona bem. F12 ("Ir para declaração") funciona na importação do Logger, mas quebra em todas as importações do jmime.

Ah, outra coisa, se eu for para a visualização 'Packages' na janela "Projects", o pacote "com.hunnysoft.jmime" será exibido e eu posso ver TODAS as classes que importei no trecho de código acima em "Bibliotecas" . A remoção da dependência acima do arquivo pom.xml faz com que este pacote desapareça e a compilação quebre.

Parece que o caminho de classe da inspeção está quebrado, mas não parece haver uma configuração para isso em nenhum lugar nas Configurações => Intenções | Áreas do compilador (não que eu esperasse essas configurações, acredito que o IDEA já deve conhecer o caminho de classe correto com base no arquivo pom e no JDK).

Como experimento final, criei um novo projeto de aplicativo J2SE padrão (sem usar o maven) e adicionei o arquivo jmime.jar diretamente ao projeto como uma de suas bibliotecas. Eu encontro exatamente os mesmos problemas descritos acima neste novo projeto.

Aqui está o MANIFEST.MF do arquivo jmime jar.

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.5.4
Created-By: 10.0-b23 (Sun Microsystems Inc.)

Name: com/hunnysoft/jmime/
Sealed: true
Specification-Title: Hunny JMIME
Specification-Version: 3.1.1
Specification-Vendor: Hunny Software, Inc.
Implementation-Title: com.hunnysoft.jmime
Implementation-Version: 3.1.1E
Implementation-Vendor: Hunny Software, Inc.

Não vejo nada incomum neste arquivo jar.

Meu melhor palpite é que talvez o problema seja um problema de dependência ausente. Mas o AFAIK jmime deve ser independente (o JarAnalyzer não cria nada, mas não tenho certeza se o jar de dependência está faltando).

Então, alguém tem alguma ideia?

Kevin Sitze
fonte
Veja também stackoverflow.com/questions/15046764/... se ele não pode resolver símbolos que fazem parte do maven dependências [para mim foi uma falta M2_HOME]
rogerdpack
1
2018.3.3. Ainda o mesmo erro ...
dieter

Respostas:

999

Antes de tudo, tente File | Invalidate Cachese, se isso não ajudar, exclua o diretório do sistema IDEA . Em seguida, importe novamente o projeto Maven e veja se ele ajuda.

Em alguns casos estranhos, as classes compiladas podem relatar informações erradas e confundir a IDEA. Verifique se as classes deste jar relatam nomes corretos usando javap .

CrazyCoder
fonte
1
Excluí os arquivos do projeto, os dirs, mas não foi até o cache inválido e a reinicialização corrigi-lo. Obrigado pela dica! Gostaria de saber se não há alguma maneira de isso ser feito automaticamente. Você pensaria que sim. Quero dizer, até reimportei totalmente o projeto do pom.xml e ele ainda não "invalidou" seus caches.
Antony Stubbs
9
FWIW, essas correções não funcionaram para mim. Eu tenho um projeto maven que depende de outro projeto. As construções funcionam dentro e fora do IDEA 10.5, mas alguns dos símbolos do outro projeto estão marcados em vermelho no projeto dependente. Cache inválido e reiniciado. Sem sorte Também foram removidos os arquivos da IDEA e reimportados o projeto dependente. Sem sorte
Pastafarian
10
Obrigado pela resposta. Finalmente, tive que dizer à IDEA para "importar meu projeto Maven usando o Maven 3". Em Configurações-> Maven-> Importando. Descoberto após uma longa troca de e-mail com [email protected].
pastafarian
1
A opção de menu agora é "Arquivo | Invalidar caches / reiniciar" (Android Studio 0.8.2, linux).
CoatedMoose
19
invalidar não funcionou, não importa quantas vezes eu tentei. Excluí a pasta .idea e reimportei o projeto com build.gradle. Funciona agora.
HelpMatters
108

O truque a seguir resolveu esse problema para mim:

  • Clique com o botão direito no editor de código
  • Passe o mouse sobre o Maven e expanda
  • Clique em Reimportar

Minha versão da ideia é 12.0.4

rshahriar
fonte
Como faço isso no IntelliJ para Mac OS?
Ankit Rustagi
@AnkitRustagi para Mac OS clique com o botão direito do mouse no diretório do projeto no painel do projeto. Maven -> Reimportação. Você também pode usar a tecla de atalho, toque duas vezes por turnos, ou Shift + Command + A, e procure por "reimportar todos os projetos Maven"
Lakota Lefler
5
Clique com o botão direito é uma dica para mim. Aparentemente, meu pom.xml não está marcado como arquivo maven, portanto, preciso clicar com o botão direito e marcado como Maven. Ativei 'Importar projetos Maven automaticamente' e todos os pacotes importados depois disso.
rasyadi
4
para 2017.1.x está trabalhando para reimportar novos projetos:, View -> Tool Windows -> Maven Projectsclique no ícone de setas do ciclo.
Vielinko 24/05
Reimportar o módulo Maven me ajudou muito, fiquei surpreso não é reimported como dependências mudar de qualquer maneira ...
Rico
37

Nenhuma das soluções acima funcionou para mim. O que fez foi remover o arquivo main.iml manualmente e de repente funcionou.

cerisier
fonte
4
Muito obrigado! Essa também foi a única solução que resolveu o problema que eu tinha. O que aconteceu foi que meu projeto foi renomeado e o IntelliJ de alguma forma não limpou os arquivos .iml antigos em .idea / modules. Exclua esses arquivos .iml extras e reconstrua o projeto corrigiu o problema.
Chen
Trabalhou! Ótimo! Mas seria bom se alguém pudesse explicar por que funciona.
Hamza Belmellouki 18/09/19
1
Onde está esse arquivo? Eu apaguei o <nome do projeto> .idl e agora a estrutura do projeto se foi !! além disso, as configurações não podem ser carregadas porque o arquivo
iml
Funciona perfeitamente. Tentei alterar o JDK, invalidar caches, reimportar projeto, nada funcionou. Excluindo o main.iml funciona.
rs_ 18/02
31

Para usuários Gradle:

Pode ser necessário sincronizar seu projeto com seu build.gradlearquivo.

Você pode clicar com o botão direito do mouse no seu arquivo gradle no painel Projeto para fazer isso, mas isso não pareceu fazer nada para mim (suspeito de um bug na minha versão). Você saberá se isso acontece porque não inicia nenhuma tarefa do IntelliJ que você estará esperando. Em vez disso, abra o painel Gradle Tool e clique no botão sincronizar (atualizar). Isso funcionou para mim onde a invalidação do cache e a reinicialização não funcionaram.

Minha própria circunstância: eu estava usando um projeto Scala com Gradle e tive que fazer isso.

bbarker
fonte
Eu só quero dizer como observação que eu precisava fazer isso novamente depois de refatorar um pouco meu sistema de construção; de alguma forma, o IntelliJ detectou alguns problemas no meu arquivo build.gradle que não apareceram anteriormente. No final, foi capaz de fazer com que tudo desse certo de maneira bastante rápida.
bbarker
7
O painel Gradle Tool está em: View > Tool Windows > Gradle
UTF_or_Death 22/02
@bbarker - Acabei de atualizar o IntelliJ para a versão mais recente no domingo, 6 de agosto de 2017. O problema mencionado quando você clica com o botão direito do mouse no arquivo build.gradle no painel Arquivos do projeto e nada acontece ainda existe. Felizmente, sua dica de usar o botão Atualizar na janela da ferramenta Gradle (Exibir -> Janelas de ferramentas -> Gradle) funcionou muito bem.
Robert Oschler
Na observação dos problemas do build.gradle: Às vezes, o IntelliJ encontra problemas inexistentes se você não tiver configurações de execução. Certa vez, tive algumas estranhas mavenCentral() could not be resolvedaté adicionar as configurações de jUnit de volta (eu havia portado um projeto inteiro para Gradle criando um novo projeto Gradle e depois copiando todos os arquivos de origem).
Egor Hans
28

Isso foi mencionado em outra resposta a essa mesma pergunta aqui , mas isso por si só corrige isso para mim. Eu faço todas as minhas compilações em um terminal separado, fora do IntelliJ. Portanto, o cache precisa ter as permissões adequadas definidas para o aplicativo IntelliJ para lê-las.

Execute-o na pasta raiz do projeto.

$ mvn -U idea:idea
Tom
fonte
Eu acho que isso pode ajudar ... mas, infelizmente, a execução dá um tempo limite de conexão. não foi possível conectar-se ao repo :(
KansaiRobot
você salvou meu (segundo semestre) dia!
Gavriel
19

Uma etapa extra, quando eu fiz Arquivo -> Invalidar Caches e reiniciei o IDE, abra um projeto. Apareceu uma caixa de notificação no canto superior direito, perguntando-me se a importação automática estava habilitada e isso resolveu o problema.

Matthew Chen
fonte
14

Outra coisa a verificar: verifique se as dependências não estão duplicadas. No meu caso, descobri que um módulo que exibia esse comportamento foi configurado incorretamente da seguinte maneira: ele dependia de outro módulo e dependia de um jar produzido por esse outro módulo. Isso significava para todos os símbolos referenciados em duplicado e era ambíguo.

Landon Kuhn
fonte
11

Nomes de módulos inconsistentes / duplicados na estrutura do projeto estavam causando esse problema para mim.

  1. Vamos para File -> Project Strucutre -> Modules
  2. Em Clique nos módulos com sublinhado vermelho
  3. Chegou à guia "Dependências"
  4. Verifique se as dependências vermelhas existem na lista de dependências. Caso contrário, renomeie-os para corresponder aos nomes de dependência existentes

Isso pode acontecer quando o IntelliJ não é desligado corretamente e, portanto, não pode salvar corretamente os nomes de módulos renomeados.

Babken Vardanyan
fonte
1
Finalmente. Eu tive dois módulos listados por algum motivo, "main" e o nome do meu projeto. Removido main e os erros desapareceram.
Bobby
9

Uma correção foi publicada? Aparece o problema originalmente afetado v11 / 12 devido a uma "revisão do compilador" em 2013. Com discussões sobre problemas relacionados em Jira até o final de 2014. http://youtrack.jetbrains.com/issue/IDEA-98425

Também no Jira IDEA-98425 foi marcado como fixo, mas não verificado (na versão 12.0.3). Nenhum dos seguintes work-around determinação ajudou este "incapaz de resolver Symbol" problema com versão 13.1.1 no Windows

uma. Excluir pasta .IdealIC13 (em seguida, arquivo \ invalidar caches / reiniciar)

b. Na janela Projetos Maven ,

b.1 mvn -U idea: idea -〉 A execução desse objetivo é suposto recarregar as dependências. Isso funciona anterior, mas desde a última FRI, a execução desse objetivo foi falha ao tentar recompilar o projeto (é claro que falha como "Impossível resolver símbolos", é isso que estou tentando corrigir executando esse comando em primeiro lugar) mvn -version - mostra a versão maven referenciada 3.2.5 e que está funcionando

b.2 Simplesmente clique com o botão direito do mouse no projeto e reimporte

b.3 Arquivo \ Invalidar caches / reiniciar

c. Tentei Ativar e desativar esta configuração: Arquivo -> Configurações -> Maven -> Importando -> "Use o maven3 para importar o projeto"

d. Política de falha na compilação Settings \ Maven \ Multiproject = Falha no final (em vez de Padrão)

Nada funciona. O que está acontecendo com o suporte do IntelliJ no Maven.

https://youtrack.jetbrains.com/issue/IDEA-99302

No histórico de versões do JetBeans, https://www.jetbrains.com/company/history.jsp

IntelliJ v14 de novembro de 2014

IntelliJ v13 DEZ 2013

Eu diria que a v12 corrigida (embora não verificada ) seria incorporada nas versões subseqüentes. Alguém com problemas semelhantes com a versão do IntelliJ? Por favor, compartilhe sua experiência. O suporte para intelliJ parece quebrado.


fonte
O problema desapareceu ... depois que eu "abra" o projeto em vez do projeto "Importar" ... caramba.
Isso funcionou para mim! :) Perdeu um dia de trabalho, mas funcionou. Pergunto-me o que é a diferença entre aberto e importação
Arran
5

Estrutura do meu projeto:

src -> main -> scala -> mypackages

O que funcionou:

Clique com o botão direito na scalapasta e clique em "Marcar diretório como raiz de origem".

axioma
fonte
4

Nenhuma das outras respostas funcionou para mim. Minhas importações não estavam sendo resolvidas porque o IntelliJ apontou para o arquivo .m2 errado.

Versão do IntelliJ: IntelliJ Idea 2018.1.5

Minha localização para o diretório .m2 foi apontada para o caminho errado. Tudo o que fiz para corrigi-lo foi apontar novamente o IntelliJ para o diretório .m2 correto e atualizá-lo.

Primeiro, vá para: Arquivo-> Configurações-> Construção, Execução, Implantação-> Ferramentas de Construção-> Maven

Eu tive que alterar o arquivo de configurações do usuário: e o repositório local: para o local correto do meu diretório .m2.

Depois disso, vá para: Arquivo-> Configurações-> Construção, Execução, Implantação-> Ferramentas de Construção-> Maven-> Repositórios

e clique no botão Atualizar.

Tim
fonte
3

Para outra alternativa.

Eu também tive esse problema quando usei o JDK7_07. Tentei todas as respostas aqui (exceto a exclusão do IDEA System Directory). Mas ainda tenho o problema. Então, o que eu fiz é:

Instale o JDK mais novo (era JDK7_45) e configure o JDK do Intellij para o novo e ele funciona.

ismailsunni
fonte
Teve o problema com o Intellij IDEA 2019.3 e o JDK 11.0.3 incluído e o resolveu instalando manualmente o JDK 11.0.4, veja aqui: stackoverflow.com/questions/61338200/…
Benjamin Zach
3

Eu só tive esse problema e ele simplesmente não desapareceu. Eu acabei com o diretório de configuração do IntelliJ ~e reconstruí meu projeto IntelliJ do zero. (Isso levou apenas 15 minutos no final, comparado a gastar uma hora tentando solucionar problemas com arquivos em cache, etc.)

Observe que meu palpite é que o problema inicial foi causado por algo como javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html(NB: a partir de 2018, esse link está morto, mas archive.org tem uma cópia da página anterior quando esta resposta foi escrita por escrito pela primeira vez). problema de espaço em disco / memória causando a falha do Java. IntelliJ parecia apenas ficar corrompido.

mozboz
fonte
3

Se o seu projeto maven for um projeto com vários módulos, verifique se alguns dos módulos são ignorados pelo intellij.

  1. Clique em Exibir -> Janelas de Ferramentas -> Projetos Maven e verifique se alguns módulos são ignorados (os módulos ignorados estão em cinza, por exemplo, gs-multi-modulena imagem a seguir).

insira a descrição da imagem aqui

  1. Clique com o botão direito do mouse no módulo ignorado e escolha Unignore Projects.

insira a descrição da imagem aqui

Em seguida, aguarde que intellij termine a indexação, após o que funcionará.

Searene
fonte
2

Depois de invalidar meu cache e reiniciar; e confirmando que minhas configurações do maven estavam corretas, eu ainda estava vendo "Não é possível resolver o símbolo" para um módulo que eu definitivamente havia definido como uma dependência. Acontece que eu o coloquei no escopo errado.

Você pode verificar clicando com o botão direito do mouse no seu módulo e selecionando Abrir Configurações do Módulo. Clique na guia dependência e verifique se o escopo da sua dependência não resolvível está definido como Compilar.

user3565334
fonte
2

Reimportar o projeto funcionou para mim. Clique com o botão direito do mouse em Projeto -> Maven -> Reimportar

quando eu fiz Arquivo -> Invalidar caches e reiniciei o IDE, abra um projeto. Ele mostrou um diálogo no canto superior direito "Alterações do Maven detectadas" e deu uma opção para importar e ativar a importação automática. Mesmo depois de importar o projeto aqui, tive o mesmo problema. O passo acima resolveu o problema.

Sandeep
fonte
2

No meu caso, estou tentando abrir um projeto de inicialização da IntellijIdea com o mesmo problema, como não foi possível importar todos os arquivos relacionados à primavera.

Então eu fiz:

Arquivo -> Fechar projeto -> Importar projeto -> Importar do modelo externo -> Escolha Gradle -> Próximo -> Selecione o projeto no local do arquivo -> Concluir

Agora tudo está funcionando como esperado.

Eu já vi muitas respostas aqui, mas finalmente encontrei esta solução. Pode ser usado para alguém como eu.

Shylendra Madda
fonte
1

Sim, parece que você precisa criar bibliotecas contendo os JARs necessários e adicioná-los como uma dependência em seu módulo.

duffymo
fonte
1

No meu caso, apenas o buildDir é removido. Nesse caso, File | Invalidate Cachesnão funciona.

Quando eu faço Build | Make Projectantes File | Invalidate Caches, tudo funciona bem.

chiguri
fonte
ele gerou um erro: o erro 5 do Java release release não é suportado
KansaiRobot
@KansaiRobot Parece que você tem seu projeto configurado para usar o Java 5. Atualmente, a maioria das bibliotecas exige pelo menos o Java 8, e não há muitas razões para usar algo menor (muitas coisas aconteceram no JDK, tanto em termos de novos recursos quanto de desempenho) , tente novamente com o Java 8 ou superior.
Egor Hans
1
  1. Abrir configurações"
  2. Procure por "Maven"
  3. Clique em "Arquivos ignorados" em "Maven"
  4. Desmarque os arquivos pom.xml que contêm as dependências ausentes
  5. Clique OK"
  6. Clique em Arquivo -> invalidar caches / reiniciar ...
  7. Clique em "Invalidar e reiniciar"
Jasper Citi
fonte
não há pom.xml na tela em 4,
KansaiRobot
1

Nenhuma das soluções acima resolveu isso para mim. Eu tive o mesmo problema em que o código foi compilado corretamente, mas o IntelliJ mostrou que não conseguiu encontrar a importação. Embora o IntelliJ tenha sugerido a importação, em primeiro lugar, da conclusão do código.

Minha solução foi mover tudo para o pacote padrão, excluir o com.foo.barpacote, criá-lo novamente e mover tudo de volta.

jmhage
fonte
1

As soluções sugeridas não funcionaram. Eu tive que cancelar o reconhecimento de vários projetos, clicando com o botão direito do mouse no projeto pom => maven => unignore.

Depois de um

mvn clean install -T 6 -DskipTests

no console, o IntelliJ estava feliz novamente. Não faço ideia de como os projetos foram ignorados ...

Ronald Teune
fonte
1

mvn idea:ideatrabalhou para mim. Encontrei aqui . Passei mais de uma hora, espero que ajude alguém

nilesh
fonte
1

Remova o arquivo: iml encontrado em java e teste as pastas dentro do projeto, invalide e reinicie.

Ele perguntará se posso remover os projetos. Coloque sim. O erro se apaga.

Harriesh Gomahan
fonte
1

O que funcionou para mim foi "Marcar como raiz de origem do diretório" o diretório em que estava a classe marcada em vermelho, depois que a marca vermelha desapareceu. Parece que, por algum motivo, não foi marcado.

Anjo sombrio
fonte
1

Para projetos Gradle:

  1. Saia do IntelliJ IDEA
  2. Exclua o <problematic-project-root>/.idea diretório
  3. Exclua o <problematic-project-root>/.gradle diretório
  4. Exclua todos os .imlarquivos em<problematic-project-root>
    • prompt de comando do Windows :DEL /S /Q *.iml
    • linux: find . | grep -e .iml$ | xargs rm
  5. Reimporte o projeto para o IntelliJ IDEA com Gradle
Eric
fonte
0

Se o projeto do maven, basta acessar as configurações -> ferramentas de construção -> maven -> importação. marque a caixa de seleção "importar projeto automatizado automaticamente". vai resolver o problema.

Johnny Martin
fonte
0

Invalidate Caches funcionou para mim, mas depois de executar o aplicativo teve o mesmo erro.

Então eu tentei ( Intellij ):

1 - Barra de menus - Refatorar | Construir | Executar | Ferramentas - clique em Compilar e em Reconstruir Projeto

2 - MVN limpo

3 - Clique com o botão direito do mouse em projeto> Maven> Gerar Fontes e Atualizar Pasta

Espero que funcione para voce.

obrigado

Djalas
fonte
0

Ou talvez o arquivo importado seja muito grande. Esse é o meu caso, quando altero a propriedade Intellij: iead.max.intellisen.filesize (o caminho é $ {idea dir} /bin/idea.properties) para um valor maior, como 25000 e reinicie o IDE, o problema desapareceu. Espero que isto ajude.

Chaojun Zhong
fonte