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.

23voto

Matthew Chen Punkte 1474

Ein zusätzlicher Schritt, als ich File -> Invalidate Caches machte und die IDE neu startete, öffnete ich ein Projekt. Es erschien eine Toastbox oben rechts, die mich fragte, ob der Auto-Import aktiviert werden soll, und damit war das Problem gelöst.

17voto

Babken Vardanyan Punkte 12232

Inkonsistente/duplizite Modulnamen in der Projektstruktur haben dieses Problem bei mir verursacht.

  1. Ir a File -> Project Strucutre -> Modules
  2. In Klicken Sie auf die Module, die rot unterstrichen sind
  3. Gehen Sie zur Registerkarte "Abhängigkeiten".
  4. Vergewissern Sie sich, dass die rot markierten Abhängigkeiten tatsächlich in der Abhängigkeitsliste vorhanden sind. Falls nicht, benennen Sie sie so um, dass sie mit den Namen der bestehenden Abhängigkeiten übereinstimmen

Dies kann passieren, wenn IntelliJ nicht ordnungsgemäß heruntergefahren wird und daher umbenannte Modulnamen nicht ordnungsgemäß gespeichert werden können.

1 Stimmen

Endlich. Ich hatte aus irgendeinem Grund zwei Module aufgelistet, "main" und meinen Projektnamen. Ich habe "main" entfernt, und die Fehler sind verschwunden.

0 Stimmen

Das ist der Grund, warum der Reimport des Projekts immer funktioniert! Weil es beim Import keine Module dupliziert. Aber irgendwo, irgendwie, IntelliJ schließlich dupliziert Module vor allem bei großen Refactors, und das passiert.

14voto

Landon Kuhn Punkte 65193

Eine andere Sache, die man überprüfen sollte: Stellen Sie sicher, dass die Abhängigkeiten nicht doppelt vorhanden sind. In meinem Fall habe ich festgestellt, dass ein Modul, das dieses Verhalten zeigt, wie folgt falsch konfiguriert war: Es hatte eine Abhängigkeit von einem anderen Modul, und es hatte eine Abhängigkeit von einem Jar, das von diesem anderen Modul erzeugt wurde. Dies bedeutete für jedes Symbol, das doppelt referenziert wurde, dass es doppeldeutig war.

11voto

Chirag Visavadiya Punkte 419

Zweimal "Shift" drücken > "Alle Maven-Projekte neu importieren" funktioniert bei mir immer.

enter image description here

5 Stimmen

Jetzt heißt es "Reload All Maven Projects".

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.

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