L'inspection IntelliJ donne «Impossible de résoudre le symbole» mais compile toujours le code

569

Plateforme: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
OS: Windows 7

J'ai donc une situation étrange avec IntelliJ qui m'a complètement déconcerté. J'ai configuré un projet Maven et j'ajoute log4j comme dépendance dans le fichier pom.xml. Les inspections IDEA fonctionnent bien et mon unité teste tous les compiler et exécuter.

J'ai ensuite ajouté la bibliothèque jmime de hunnysoft à mon référentiel maven local en utilisant le fichier mvn install: install-file comme suit.

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

Maven a très bien installé le fichier jar dans mon référentiel local.

Je suis ensuite allé dans Paramètres d'IntelliJ => Maven => Services de référentiel et j'ai mis à jour mon référentiel local (afin qu'IntelliJ réindexe le contenu du référentiel).

Enfin, j'ai ajouté la dépendance suivante à mon fichier pom.xml (juste au-dessus de la dépendance log4j).

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

Je crée maintenant une nouvelle classe comme suit:

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

Maintenant pour l'étrangeté. Le mécanisme d'intention d'IntelliJ détecte et reconnaît très bien l'importation de l'enregistreur dans le fichier pom maven. Cependant, pour toutes les importations hunnysoft, il signale: "Impossible de résoudre le symbole 'ByteString / Field / FieldBody'", MAIS Build => Compile 'StackOverflowQuestion.java' compile tout correctement et le test unitaire que j'ai créé pour cette classe fonctionne bien (bien que les intentions marquent également l'appel à create () comme un problème).

Quelque part, IntelliJ ignore en quelque sorte le fichier jmime.jar pour le sous-système d'intention. Je suis confus parce que la dépendance log4j fonctionne bien et que tout se compile et fonctionne correctement. F12 ("Go To Declaration") fonctionne sur l'importation Logger, mais interrompt toutes les importations jmime.

Oh, une autre chose, si je vais dans la vue "Packages" dans la fenêtre "Projets", le package "com.hunnysoft.jmime" apparaît et je peux voir TOUTES les classes que j'ai importées dans l'extrait de code ci-dessus sous "Bibliothèques" . La suppression de la dépendance ci-dessus du fichier pom.xml entraîne la disparition de ce package et la compilation s'arrête.

Il semble que le chemin de classe de l'inspection soit rompu, mais il ne semble pas y avoir de paramètre pour cela n'importe où dans Paramètres => Intentions | Zones du compilateur (pas que je m'attendais à de tels paramètres, je pense que l'IDEA devrait déjà connaître le chemin de classe correct en fonction du fichier pom et du JDK).

Comme dernière expérience, j'ai créé un tout nouveau projet d'application standard J2SE (sans utiliser maven) et ajouté le fichier jmime.jar directement au projet en tant qu'une de ses bibliothèques. Je rencontre exactement les mêmes problèmes que ceux décrits ci-dessus dans ce nouveau projet.

Voici le MANIFEST.MF du fichier 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.

Je ne vois rien d'inhabituel dans ce fichier jar.

Ma meilleure supposition est que le problème pourrait être un problème de dépendance manquant. Mais AFAIK jmime est censé être autonome (JarAnalyzer ne propose rien, mais je ne suis pas sûr que ce soit le cas si un pot de dépendance est manquant).

Alors, quelqu'un a des IDÉES?

Kevin Sitze
la source
Voir aussi stackoverflow.com/questions/15046764/… s'il ne peut pas résoudre les symboles qui font partie des dépendances maven [pour moi, c'était un M2_HOME manquant]
rogerdpack
1
2018.3.3. Toujours la même erreur ...
Dieter

Réponses:

999

Tout d'abord, vous devriez essayer File | Invalidate Cacheset si cela n'aide pas, supprimez le répertoire système IDEA . Réimportez ensuite le projet Maven et voyez si cela aide.

Dans certains cas étranges, les classes compilées peuvent rapporter des informations erronées et confondre IDEA. Vérifiez que les classes de ce fichier jar indiquent des noms corrects à l'aide de javap .

CrazyCoder
la source
1
J'ai supprimé les fichiers de projet, les répertoires, mais ce n'est que lorsque le cache d'invalidation et de redémarrage l'a corrigé. Merci pour le conseil! Je me demande s'il n'y a pas moyen de procéder automatiquement. On pourrait le penser. Je veux dire, j'ai même totalement réimporté le projet depuis pom.xml, et il n'avait toujours pas "invalidé" ses caches.
Antony Stubbs
9
FWIW, ces correctifs n'ont pas fonctionné pour moi. J'ai un projet maven qui dépend d'un autre projet. Les builds fonctionnent à l'intérieur et à l'extérieur d'IDEA 10.5 mais certains des symboles de l'autre projet sont marqués en rouge dans le projet dépendant. Cache invalidé et redémarré. Pas de chance. A également supprimé les fichiers IDEA et réimporté le projet dépendant. Pas de chance.
pastafari
10
Merci pour la réponse. Il s'est avéré, finalement, que je devais dire à IDEA «d'importer mon projet Maven en utilisant Maven 3». Sous Paramètres-> Maven-> Importation. Découvert après un long échange d'e-mails avec [email protected].
pastafarian
1
L'option de menu est désormais "Fichier | Invalider les caches / redémarrer" (Android Studio 0.8.2, linux).
CoatedMoose
19
invalider n'a pas fonctionné, peu importe combien de fois j'ai essayé. J'ai supprimé le dossier .idea puis réimporté le projet avec build.gradle. Ça fonctionne maintenant.
HelpMatters
108

L'astuce suivante a résolu ce problème pour moi:

  • Clic droit sur l'éditeur de code
  • Passez la souris sur Maven et développez
  • Cliquez sur Réimporter

Ma version d'idée est 12.0.4

rshahriar
la source
Comment faire cela dans IntelliJ pour Mac OS?
Ankit Rustagi
@AnkitRustagi pour Mac OS cliquez avec le bouton droit sur le répertoire du projet sous le panneau de projet. Maven -> Réimporter. Vous pouvez également utiliser la touche de raccourci, Maj double appui ou Maj + Commande + A, et rechercher «réimporter tous les projets maven»
Lakota Lefler
5
Le clic droit est un indice pour moi. Apparemment, mon pom.xml n'est pas marqué comme fichier maven, donc je dois faire un clic droit et marqué est comme Maven. J'ai activé «Importer automatiquement les projets Maven» et tous les packages importés par la suite.
rasyadi
4
pour 2017.1.x fonctionne réimporter des projets maven:, View -> Tool Windows -> Maven Projectspuis cliquez sur l'icône de flèches de cycle.
Vielinko
La réimportation du module Maven m'a également aidé, j'ai été surpris qu'il ne soit pas réimporté car les dépendances changent de toute façon ...
Rich
37

Aucune des solutions ci-dessus n'a fonctionné pour moi. Ce qui a été de supprimer manuellement le fichier main.iml et cela a soudainement fonctionné.

cerisier
la source
4
Grand merci! C'était aussi la seule solution qui a résolu le problème que j'avais. Ce qui s'est passé, c'est que mon projet a été renommé et IntelliJ n'a pas effacé les anciens fichiers .iml sous .idea / modules. Supprimez ces fichiers .iml supplémentaires et reconstruisez le projet a résolu le problème.
Chen
Travaillé! Génial! Mais ce serait bien si quelqu'un pouvait expliquer pourquoi cela fonctionne.
Hamza Belmellouki
1
Où est ce fichier ?? J'ai supprimé le <projectname> .idl et maintenant la structure du projet a disparu !! en outre, les paramètres ne peuvent pas être chargés car le fichier iml n'existe pas
KansaiRobot
Fonctionne parfaitement. J'ai essayé de changer JDK, d'invalider les caches, de réimporter le projet, rien n'a fonctionné. La suppression de main.iml fonctionne.
rs_
31

Pour les utilisateurs Gradle:

Vous devrez peut-être synchroniser votre projet avec votre build.gradlefichier.

Vous pouvez faire un clic droit sur votre fichier gradle sous le volet Projet pour le faire, mais cela ne semble rien faire pour moi (je soupçonne un bogue dans ma version). Vous saurez si cela se produit car cela ne lancera pas les tâches IntelliJ que vous attendez. Ouvrez plutôt le volet Gradle Tool , puis cliquez sur le bouton synchronize (refresh). Cela a fonctionné pour moi où l'invalidation du cache et le redémarrage n'ont pas fonctionné.

Ma propre circonstance: j'utilisais un projet Scala avec Gradle et je devais le faire.

bbarker
la source
Je veux juste dire en guise de remarque que je devais recommencer après avoir un peu refactorisé mon système de build; d'une manière ou d'une autre, IntelliJ a repéré des problèmes avec mon fichier build.gradle qui n'apparaissaient pas auparavant. En fin de compte, a réussi à le faire fonctionner assez rapidement.
bbarker
7
Le volet Outil Gradle est à: View > Tool Windows > Gradle
UTF_or_Death
@bbarker - Je viens de mettre à jour IntelliJ vers la dernière version en date du dimanche 6 août 2017. Le problème que vous mentionnez était de cliquer avec le bouton droit sur le fichier build.gradle dans le volet Fichiers de projet et rien ne se passe toujours. Heureusement, votre astuce pour utiliser le bouton Actualiser dans la fenêtre de l'outil Gradle (Affichage -> Fenêtres d'outils -> Gradle) a très bien fonctionné.
Robert Oschler
À propos des problèmes de build.gradle: Parfois, IntelliJ trouve des problèmes inexistants si vous n'avez aucune configuration d'exécution. J'ai eu une fois un peu bizarre mavenCentral() could not be resolvedjusqu'à ce que j'ajoute les configurations jUnit (j'avais porté un projet entier vers Gradle en créant un nouveau projet Gradle, puis en copiant tous les fichiers source).
Egor Hans
28

Cela a été mentionné dans une autre réponse à cette même question ici , mais cela seul corrige cela pour moi. Je fais toutes mes builds dans un terminal séparé, en dehors d'IntelliJ. Par conséquent, le cache doit disposer des autorisations appropriées définies pour que l'application IntelliJ puisse les lire.

Exécutez-le à partir du dossier racine du projet.

$ mvn -U idea:idea
À M
la source
Je pense que cela pourrait aider ... mais malheureusement, son exécution donne un délai de connexion. impossible de se connecter au
dépôt
vous avez sauvé ma (deuxième moitié de) journée!
Gavriel
19

Une étape supplémentaire, lorsque j'ai fait File -> Invalidate Caches et redémarré l'IDE, ouvrez un projet. Il a fait apparaître une boîte à pain en haut à droite me demandant s'il faut activer l'importation automatique et cela a résolu le problème.

Matthew Chen
la source
14

Autre chose à vérifier: assurez-vous que les dépendances ne sont pas dupliquées. Dans mon cas, j'ai trouvé qu'un module présentant ce comportement était mal configuré comme suit: il avait une dépendance sur un autre module, et il avait une dépendance sur un bocal produit par cet autre module. Cela signifiait pour chaque symbole référencé en double et était ambigu.

Landon Kuhn
la source
11

Les noms de modules incohérents / en double dans la structure du projet étaient à l'origine de ce problème pour moi.

  1. Aller à File -> Project Strucutre -> Modules
  2. Dans Cliquez sur les modules qui ont un soulignement rouge
  3. Accès à l'onglet "Dépendances"
  4. Assurez-vous que les dépendances rouges existent réellement dans la liste des dépendances. Sinon, renommez-les pour qu'ils correspondent aux noms de dépendance existants

Cela peut se produire lorsque IntelliJ ne s'arrête pas correctement et ne peut donc pas enregistrer correctement les noms de modules renommés.

Babken Vardanyan
la source
1
Finalement. J'ai eu deux modules répertoriés pour une raison quelconque, "principal" et le nom de mon projet. Suppression du principal et les erreurs ont disparu.
Bobby
9

Un correctif a-t-il été publié? Apparaît un problème affecté à l'origine v11 / 12 en raison d'une "révision du compilateur" en 2013. Avec une discussion sur les problèmes connexes dans Jira jusqu'à la fin de 2014. http://youtrack.jetbrains.com/issue/IDEA-98425

Également sur Jira IDEA-98425 a été marqué comme fixe mais non vérifié (sur v12.0.3). Aucun des contournements suivants n'a permis de résoudre ce problème «Impossible de résoudre le symbole» avec la version 13.1.1 sous Windows

une. Supprimez le dossier .IdealIC13 (Ensuite, File \ Invalidate Caches / Restart)

b. Depuis la fenêtre Projets Maven ,

b.1 mvn -U idée: idée -〉 L'exécution de cet objectif maven suppose de recharger les dépendances. Cela fonctionne avant, mais depuis le dernier FRI, l'exécution de cet objectif maven a échoué car il a essayé de recompiler le projet (Bien sûr, il échoue en tant que «Impossible de résoudre les symboles», c'est ce que j'essaie de corriger en exécutant cette commande en premier lieu) mvn -version - montre la version de maven référencée 3.2.5 et que cela fonctionne

b.2 Cliquez simplement avec le bouton droit sur le projet et réimportez

b.3 Fichier \ Caches invalides / Redémarrer

c. J'ai essayé à la fois d'activer et de désactiver ce paramètre: Fichier -> Paramètres -> Maven -> Importation -> "Utiliser maven3 pour importer le projet"

ré. Settings \ Maven \ Multiproject build fail policy = Échec à la fin (au lieu de Default)

Rien ne fonctionne. Que devient le support IntelliJ sur Maven.

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

Depuis l'historique des versions de JetBeans, https://www.jetbrains.com/company/history.jsp

IntelliJ v14 NOV 2014

IntelliJ v13 DEC 2013

Je suppose que la version 12 fixe (bien que non vérifiée ) serait intégrée dans les versions ultérieures. Quelqu'un ayant des problèmes similaires avec quelle version d'IntelliJ? Veuillez partager votre expérience. Le support d'IntelliJ maven semble rompu.


la source
Le problème a disparu ... après que j'ai "ouvert" le projet au lieu du projet "importé" ... putain d'étrange.
Cela a fonctionné pour moi! :) Perdu une journée de travail mais ça a marché. Je me demande quelle est la différence entre l'ouverture et l'importation
Arran
5

Ma structure de projet:

src -> main -> scala -> mypackages

Ce qui a fonctionné:

Faites un clic droit sur le scaladossier, puis cliquez sur "Marquer le répertoire comme racine des sources".

axiome
la source
4

Aucune des autres réponses n'a fonctionné pour moi. Mes importations n'ont pas été résolues car IntelliJ a signalé un mauvais fichier .m2.

Version IntelliJ: IntelliJ Idea 2018.1.5

Mon emplacement pour le répertoire .m2 a été pointé vers le mauvais chemin. Tout ce que j'ai fait pour le corriger, c'est rediriger IntelliJ vers le bon répertoire .m2 et le mettre à jour.

Tout d'abord, allez dans: Fichier-> Paramètres-> Build, Execution, Deployment-> Build Tools-> Maven

J'ai dû changer le fichier de paramètres utilisateur: et le référentiel local: à l'emplacement correct de mon répertoire .m2.

Après cela, allez dans: Fichier-> Paramètres-> Build, Execution, Deployment-> Build Tools-> Maven-> Repositories

et cliquez sur le bouton Mettre à jour.

Tim
la source
3

Pour une autre alternative.

J'ai également eu ce problème lorsque j'ai utilisé JDK7_07. J'ai essayé toutes les réponses ici (sauf la suppression du répertoire système IDEA). Mais j'ai toujours le problème. Donc ce que j'ai fait c'est:

Installez le dernier JDK (c'était JDK7_45), et définissez le JDK d'Intellij sur le nouveau, et cela fonctionne.

ismailsunni
la source
Nous avons eu le problème avec Intellij IDEA 2019.3 et le JDK 11.0.3 fourni et l'avons résolu en installant manuellement JDK 11.0.4, voir ici: stackoverflow.com/questions/61338200/…
Benjamin Zach
3

Je viens d'avoir ce problème et il ne disparaîtrait pas. J'ai finalement effacé le répertoire de configuration IntelliJ ~et reconstruit mon projet IntelliJ à partir de zéro. (Cela n'a pris qu'environ 15 minutes à la fin, par rapport à passer une heure à essayer de résoudre les problèmes avec les fichiers mis en cache, etc.)

Notez que je suppose que le problème initial a été causé par quelque chose comme javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html(NB: à partir de 2018, ce lien est mort, mais archive.org a une copie de la page depuis le moment où cette réponse a été écrite pour la première fois). problème d'espace disque / mémoire provoquant le plantage de Java. IntelliJ semblait simplement corrompu.

mozboz
la source
3

Si votre projet maven est un projet multi-modules, vérifiez si certains modules sont ignorés par intellij.

  1. Cliquez sur Affichage -> Fenêtres d'outils -> Projets Maven et vérifiez si certains modules sont ignorés (les modules ignorés sont en gris, par exemple gs-multi-moduledans l'image suivante).

entrez la description de l'image ici

  1. Faites un clic droit sur le module ignoré et choisissez Unignore Projects.

entrez la description de l'image ici

Ensuite, attendez qu'intellij termine l'indexation, après quoi cela fonctionnera.

Searene
la source
2

Oui, on dirait que vous devez créer des bibliothèques contenant les fichiers JAR dont vous avez besoin et les ajouter en tant que dépendance dans votre module.

duffymo
la source
2

Après avoir invalidé mon cache et redémarré; et confirmant que mes paramètres maven étaient corrects, je voyais toujours "Impossible de résoudre le symbole" pour un module que j'avais définitivement défini comme une dépendance. Il s'avère que je l'avais réglé sur une mauvaise portée.

Vous pouvez vérifier en cliquant avec le bouton droit sur votre module et en sélectionnant Ouvrir les paramètres du module. Cliquez sur l'onglet de dépendance et vérifiez que l'étendue de votre dépendance non résolvable est définie sur Compiler.

user3565334
la source
2

La réimportation du projet a fonctionné pour moi. Clic droit sur Projet -> Maven -> Réimporter

quand j'ai fait File -> Invalidate Caches et redémarré l'IDE, ouvrez un projet. Il a montré une boîte de dialogue en haut à droite "Les changements Maven détectés" et a donné une option pour importer et activer l'importation automatique. Même après avoir importé le projet ici, j'ai eu le même problème. L'étape ci-dessus a résolu le problème.

Sandeep
la source
2

Parfois, j'ouvre simplement la structure du projet, je clique sur le projet, puis je choisis une version du SDK .

Arthur Wu
la source
2

Dans mon cas, j'essaie d'ouvrir un projet de démarrage de printemps à partir d'IntellijIdea a le même problème que l'impossibilité d'importer tous les fichiers liés au printemps.

Ensuite, j'ai fait:

Fichier -> Fermer le projet -> Importer le projet -> Importer à partir d'un modèle externe -> Choisissez Gradle -> Suivant -> Sélectionnez le projet à partir de l'emplacement du fichier -> Terminer

Maintenant, tout fonctionne bien comme prévu.

J'ai vu beaucoup de réponses ici mais j'ai finalement trouvé cette solution. Il peut être utile pour quelqu'un comme moi.

Shylendra Madda
la source
1

Dans mon cas, seul buildDir est supprimé. Dans ce cas, File | Invalidate Cachesne fonctionne pas.

Quand je le fais Build | Make Projectavant File | Invalidate Caches, tout fonctionne bien.

chiguri
la source
il a généré une erreur: la version 5 de Java n'a pas été prise en charge
KansaiRobot
@KansaiRobot On dirait que votre projet est configuré pour utiliser Java 5. De nos jours, la plupart des bibliothèques nécessitent au moins Java 8, et il n'y a pas beaucoup de raisons d'utiliser quoi que ce soit de plus bas (beaucoup de choses se sont produites dans le JDK, à la fois en termes de nouvelles fonctionnalités et performances) , essayez donc à nouveau avec Java 8 ou supérieur.
Egor Hans
1
  1. Ouvrez "Paramètres"
  2. Recherche de "Maven"
  3. Cliquez sur "Fichiers ignorés" sous "Maven"
  4. Décochez les fichiers pom.xml contient les dépendances manquantes
  5. Cliquez sur OK"
  6. Cliquez sur Fichier -> Invalider les caches / redémarrer ...
  7. Cliquez sur "Invalider et redémarrer"
Jasper Citi
la source
il n'y a pas de pom.xml à l'écran dans 4,
KansaiRobot
1

Aucune des solutions ci-dessus ne l'a résolu pour moi. J'ai eu le même problème où le code s'est bien compilé mais IntelliJ a montré qu'il ne pouvait pas trouver l'importation. Même si IntelliJ a suggéré l'importation en premier lieu à partir de l'achèvement du code.

Ma solution était de tout déplacer vers le package par défaut, de supprimer le com.foo.barpackage, puis de le recréer et de tout replacer.

jmhage
la source
1

Les solutions suggérées n'ont pas fonctionné. Je devais ignorer plusieurs projets, en faisant un clic droit sur le projet pom => maven => unignore.

Puis après un

mvn clean install -T 6 -DskipTests

dans la console, IntelliJ était de nouveau heureux. Aucune idée de la façon dont les projets ont été ignorés ...

Ronald Teune
la source
1

mvn idea:ideatravaillé pour moi. Je l'ai trouvé ici . J'ai passé plus d'une heure, j'espère que cela aide quelqu'un

nilesh
la source
1

Supprimez le fichier: iml trouvé dans les dossiers java et test à l'intérieur du projet et invalidez et redémarrez.

Il me sera demandé si je peux supprimer les projets. Mettez Oui. L'erreur disparaîtra.

Harriesh Gomahan
la source
1

Ce qui a fonctionné pour moi, c'était de "Marquer comme racine de la source du répertoire" le répertoire dans lequel se trouvait la classe marquée en rouge, après quoi la marque rouge a disparu. Semble que pour une raison quelconque, il n'était pas marqué.

Ange noir
la source
1

Pour les projets Gradle:

  1. Quitter IntelliJ IDEA
  2. Supprimer le <problematic-project-root>/.idearépertoire
  3. Supprimer le <problematic-project-root>/.gradlerépertoire
  4. Supprimer tous les .imlfichiers de<problematic-project-root>
    • invite de commande windows :DEL /S /Q *.iml
    • linux: find . | grep -e .iml$ | xargs rm
  5. Réimportez le projet dans IntelliJ IDEA avec Gradle
Eric
la source
0

si projet maven alors allez simplement dans les paramètres -> outils de construction -> maven -> importation. cochez la case "importer automatiquement le projet maven". va résoudre le problème.

Johnny Martin
la source
0

Les caches invalides ont fonctionné pour moi, mais après avoir exécuté l'application, la même erreur s'est produite.

J'ai donc essayé ( Intellij ):

1 - Barre de menus - Refactor | Construire | Run | Outils - cliquez sur Build puis Rebuild Project

2 - MVN propre

3 - Faites un clic droit sur le projet> Maven> Générer des sources et mettre à jour le dossier

J'espère que cela fonctionne pour toi.

Merci

Djalas
la source
0

Ou peut-être que le fichier que vous importez est trop volumineux. C'est mon cas, lorsque je change la propriété Intellij: iead.max.intellisen.filesize (le chemin est $ {idée dir} /bin/idea.properties) en une valeur plus grande, comme 25000 et redémarrez l'IDE, le problème a disparu. J'espère que cela t'aides.

Chaojun Zhong
la source