785 Stimmen

IntelliJ-Inspektion meldet "Symbol kann nicht aufgelöst werden", kompiliert aber trotzdem Code

Plattform: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
Betriebssystem: Windows 7

Ich habe also eine seltsame Situation mit IntelliJ, die mich völlig ratlos macht. Ich richte ein Maven-Projekt ein und füge log4j als eine Abhängigkeit in der pom.xml-Datei hinzu. Die IDEA-Inspektionen laufen gut und meine Unit-Tests werden alle kompiliert und ausgeführt.

Ich habe dann die jmime-Bibliothek von hunnysoft zu meinem lokalen Maven-Repository hinzugefügt, indem ich die mvn install:install-Datei wie folgt verwendet habe.

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

Maven hat die jar-Datei problemlos in mein lokales Repository installiert.

Dann ging ich in IntelliJs Einstellungen => Maven => Repository Services und aktualisierte mein lokales Repository (so dass IntelliJ den Inhalt des Repositorys neu indizieren würde).

Schließlich habe ich die folgende Abhängigkeit zu meiner pom.xml-Datei hinzugefügt (direkt über der log4j-Abhängigkeit).

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

Ich erstelle nun eine neue Klasse wie folgt:

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

Und jetzt das Seltsame. IntelliJ's Intent-Mechanismus erkennt den Logger-Import in der Maven Pom-Datei einwandfrei. Jedoch für alle hunnysoft Importe meldet es: "Das Symbol 'ByteString/Field/FieldBody' kann nicht aufgelöst werden", BUT Build => Compile 'StackOverflowQuestion.java' kompiliert alles korrekt und der Unit-Test, den ich für diese Klasse erstellt habe, läuft einwandfrei (obwohl die Absichten den Aufruf von create() ebenfalls als Problembereich markieren).

Irgendwo, irgendwie ignoriert IntelliJ also die Datei jmime.jar für das Intention-Subsystem. Ich bin verwirrt, weil die log4j-Abhängigkeit funktioniert gut und alles kompiliert und läuft gut. F12 ("Go To Declaration") funktioniert beim Logger-Import, bricht aber bei allen jmime-Importen ab.

Ach ja, noch etwas: Wenn ich im Fenster "Projekte" die Ansicht "Pakete" aufrufe, erscheint das Paket "com.hunnysoft.jmime" und ich kann ALLE Klassen sehen, die ich im obigen Codeschnipsel unter "Bibliotheken" importiert habe. Wenn ich die oben genannte Abhängigkeit aus der pom.xml-Datei entferne, verschwindet dieses Paket und die Kompilierung wird abgebrochen.

Es scheint, dass der Klassenpfad der Inspektion kaputt ist, aber es scheint nirgendwo in den Bereichen Einstellungen => Intentions | Compiler eine Einstellung dafür zu geben (nicht, dass ich solche Einstellungen erwartet hätte, ich glaube, IDEA sollte den korrekten Klassenpfad auf der Grundlage der pom-Datei und des JDK bereits kennen).

Als letztes Experiment habe ich ein brandneues Standard-J2SE-Anwendungsprojekt erstellt (ohne Maven zu verwenden) und die Datei jmime.jar direkt als eine der Bibliotheken in das Projekt eingefügt. In diesem neuen Projekt stieß ich auf genau die gleichen Probleme wie oben beschrieben.

Hier ist die MANIFEST.MF aus der jmime jar-Datei.

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.

Ich sehe nichts Ungewöhnliches in dieser jar-Datei.

Meine beste Vermutung ist, dass das Problem vielleicht ein Problem mit fehlenden Abhängigkeiten ist. Aber AFAIK jmime soll selbst enthalten sein (JarAnalyzer kommt nicht mit etwas, aber ich bin nicht sicher, es würde, wenn eine Abhängigkeit jar fehlt).

Hat jemand eine IDEE?

1 Stimmen

Siehe auch stackoverflow.com/questions/15046764/ wenn es Symbole nicht auflösen kann, die Teil der Maven-Abhängigkeiten sind [bei mir war es ein fehlendes M2_HOME]

1 Stimmen

2018.3.3. Immer noch der gleiche Fehler...

2 Stimmen

File>Invalidate Caches/Restart hat bei mir in Version 2020.03 funktioniert.

10voto

cb4 Punkte 4346

Aktualisierung 2022

IntelliJ 2022.1 bietet einen interaktiven, schrittweisen Prozess File -> Repair IDE . Es führt Sie nacheinander durch 5 Schritte, um das Problem für das aktuelle Projekt zu lösen, bevor die Caches für alle Projekte ungültig gemacht werden. Aus der IDEA-Dokumentation :

  1. Projektindizes aktualisieren
  2. Projektindizes neu scannen
  3. Projekt wieder öffnen
  4. Gemeinsame Indizes löschen
  5. Projekt Reindex
  6. Caches ungültig machen und neu starten

Die Schritte 1 bis 3 haben das Problem für mein Projekt gelöst.

9voto

Tim Punkte 1466

Keine der anderen Antworten hat bei mir funktioniert. Meine Importe wurden nicht aufgelöst, weil IntelliJ auf die falsche .m2-Datei verwies.

IntelliJ Version: IntelliJ Idea 2018.1.5

Mein Standort für die .m2 Verzeichnis wurde auf den falschen Pfad verwiesen. Um das Problem zu beheben, musste ich nur IntelliJ auf das richtige .m2-Verzeichnis verweisen und es aktualisieren.

Gehen Sie zunächst zu: Datei->Einstellungen->Erstellung, Ausführung, Bereitstellung->Erstellungswerkzeuge->Maven

Ich musste die Datei mit Benutzereinstellungen: y el Lokales Repository: an den richtigen Ort meines .m2-Verzeichnisses.

Danach gehen Sie zu: Datei->Einstellungen->Erstellung, Ausführung, Bereitstellung->Erstellungswerkzeuge->Maven->Repositories

und klicken Sie auf die Schaltfläche Aktualisieren.

1 Stimmen

Mein lokales Repository zeigt auf den falschen Ort. Ihre Antwort hat mir das Leben gerettet!!!!!

8voto

Josh Punkte 3474

Ich bin neidisch auf alle von Ihnen, die durch Datei / Caches ungültig machen eine Lösung gefunden haben. Ich habe gerade Stunden damit verbracht, alles über diese Frage und ein paar andere aus dem Web zu versuchen.

Der magische Menüpunkt hat bei mir nicht funktioniert, also habe ich die Caches selbst ungültig gemacht, indem ich die %USERPROFILE%\AppData\Local\JetBrains\IntelliJIdea2020.3\caches

Nachdem ich dies getan und IntelliJ (2020.3) neu gestartet hatte, wurden die Indizes neu erstellt und die Fehler verschwanden.

0 Stimmen

Danke für Ihre Lösung

0 Stimmen

Sie können es auch mit Datei -> Caches ungültig machen versuchen, das scheint dasselbe zu sein.

0 Stimmen

Ja, bei mir hat es auch nach wiederholten Versuchen nicht funktioniert, weshalb ich nach dem Ordner gesucht habe, den er zu löschen versuchte

6voto

Searene Punkte 22315

Wenn Ihr Maven-Projekt ein Projekt mit mehreren Modulen ist, überprüfen Sie, ob einige der Module von Intellij ignoriert werden.

  1. Klicken Sie auf Ansicht -> Werkzeugfenster -> Maven-Projekte und überprüfen Sie, ob einige Module ignoriert werden (ignorierte Module sind grau dargestellt, z.B. gs-multi-module in der folgenden Abbildung).

enter image description here

  1. Klicken Sie mit der rechten Maustaste auf das ignorierte Modul und wählen Sie Unignore Projects .

enter image description here

Warten Sie dann, bis intellij die Indizierung abgeschlossen hat, dann funktioniert es.

6voto

Hourglasser Punkte 457

Ich hatte ein Problem mit dem Maven Importer JDK - irgendwie hat er sich auf JDK 11 umgestellt, aber Maven Project reload funktionierte nur mit JDK 8.

enter image description here

1 Stimmen

Dasselbe hier, ich musste zurück zu JDK wechseln. 1.8.0_252

0 Stimmen

Auch bei mir hat sich das Problem gelöst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X