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.

1346voto

CrazyCoder Punkte 369803

Zunächst einmal sollten Sie versuchen File | Invalidate Caches und wenn das nicht hilft, löschen Sie IDEA-Systemverzeichnis . Importieren Sie dann das Maven-Projekt erneut und sehen Sie, ob es hilft.

In einigen seltsamen Fällen können kompilierte Klassen falsche Informationen melden und IDEA verwirren. Überprüfen Sie, dass die Klassen aus diesem Jar korrekte Namen melden, indem Sie javap .

3 Stimmen

Ich habe Projektdateien und Verzeichnisse gelöscht, aber erst das Ungültigmachen des Cache und der Neustart haben das Problem behoben. Danke für den Tipp! Ich frage mich, ob es nicht eine Möglichkeit gibt, dies automatisch zu tun. Das sollte man meinen. Ich meine, ich habe das Projekt sogar komplett aus der pom.xml reimportiert, und es hatte seine Caches immer noch nicht "ungültig" gemacht.

14 Stimmen

FWIW, diese Korrekturen haben bei mir nicht funktioniert. Ich habe ein Maven-Projekt, das eine Abhängigkeit von einem anderen Projekt hat. Builds funktionieren innerhalb und außerhalb von IDEA 10.5, aber einige der Symbole aus dem anderen Projekt sind in dem abhängigen Projekt rot markiert. Ich habe den Cache ungültig gemacht und neu gestartet. Ohne Erfolg. Außerdem habe ich die IDEA-Dateien entfernt und das abhängige Projekt erneut importiert. Ohne Erfolg.

0 Stimmen

@pastafarian, das könnte ein bekannter Fehler sein, der bereits behoben ist, haben Sie IDEA 12 ausprobiert?

144voto

rshahriar Punkte 2352

Der folgende Trick hat dieses Problem für mich gelöst:

  • Rechtsklick auf den Code-Editor
  • Bewegen Sie den Mauszeiger auf Maven und erweitern Sie
  • Klicken Sie auf Reimport

Meine Vorstellung ist Version 12.0.4

0 Stimmen

Wie kann ich dies in IntelliJ für Mac OS tun?

0 Stimmen

@AnkitRustagi für Mac OS klicken Sie mit der rechten Maustaste auf das Projektverzeichnis im Projektfenster. Maven -> Reimportieren. Sie können auch die Tastenkombination Doppeltippen Umschalt oder Umschalt + Befehl + A verwenden und nach "reimport all maven projects" suchen.

7 Stimmen

Ein Rechtsklick ist ein Hinweis für mich. Anscheinend ist meine pom.xml nicht als Maven-Datei markiert, daher muss ich mit der rechten Maustaste klicken und sie als Maven-Datei markieren. Ich habe "Maven-Projekte automatisch importieren" aktiviert und alle Pakete danach importiert.

51voto

cerisier Punkte 1101

Keine der oben genannten Lösungen hat bei mir funktioniert. Ich habe die Datei main.iml manuell entfernt, und plötzlich funktionierte es.

5 Stimmen

Ein großes Dankeschön! Dies war auch die einzige Lösung, die das Problem, das ich hatte, gelöst hat. Mein Projekt wurde umbenannt und IntelliJ hat irgendwie die alten .iml-Dateien unter .idea/modules nicht gelöscht. Durch das Löschen dieser zusätzlichen .iml-Dateien und das Neuanlegen des Projekts wurde das Problem behoben.

0 Stimmen

Es hat geklappt! Toll! Aber es wäre schön, wenn jemand erklären könnte, warum es funktioniert.

1 Stimmen

Wo ist diese Datei? Ich habe die <projectname>.idl gelöscht und jetzt ist die Projektstruktur weg!! außerdem können die Einstellungen nicht geladen werden, weil die iml-Datei nicht existiert

49voto

Tom Punkte 699

Dies wurde in einer anderen Antwort auf dieselbe Frage erwähnt aquí aber damit ist die Sache für mich schon erledigt. Ich mache alle meine Builds in einem separaten Terminal, außerhalb von IntelliJ. Die Caches müssen also die richtigen Berechtigungen haben, damit die IntelliJ-App sie lesen kann.

Führen Sie es aus dem Root-Ordner des Projekts aus.

$ mvn -U idea:idea

0 Stimmen

Ich denke, das könnte helfen... aber leider gibt es beim Ausführen eine Zeitüberschreitung der Verbindung.

40voto

bbarker Punkte 9463

Für Gradle-Benutzer:

Möglicherweise müssen Sie Ihr Projekt mit Ihrem build.gradle Datei.

Sie können dazu mit der rechten Maustaste auf Ihre gradle-Datei im Projektfenster klicken, mais Das schien bei mir nichts zu bewirken (ich vermute einen Fehler in meiner Version). Sie erkennen dies daran, dass keine IntelliJ-Aufgaben gestartet werden, auf die Sie warten. Stattdessen, Öffnen Sie das Gradle-Werkzeugfenster und klicken Sie dann auf die Schaltfläche Synchronisieren (Aktualisieren). Dies hat bei mir funktioniert, während das Ungültigmachen des Cache und der Neustart nicht funktionierten.

Mein eigener Umstand: Ich habe ein Scala-Projekt mit Gradle verwendet und musste dies tun.

0 Stimmen

Ich möchte nur als Randbemerkung sagen, dass ich dies erneut tun musste, nachdem ich mein Build-System ein wenig umgestaltet hatte; irgendwie entdeckte IntelliJ einige Probleme mit meiner build.gradle-Datei, die zuvor nicht aufgetaucht waren. Am Ende war in der Lage, es zu bekommen, um alles ziemlich schnell zu arbeiten.

10 Stimmen

Gradle Tool-Fenster ist unter: View > Tool Windows > Gradle

0 Stimmen

@bbarker - Ich habe IntelliJ gerade auf die neueste Version vom Sonntag, den 6. August 2017, aktualisiert. Das Problem, das Sie erwähnen, wenn Sie mit der rechten Maustaste auf die build.gradle-Datei im Projektdateien-Fenster klicken und nichts passiert, besteht immer noch. Glücklicherweise hat Ihr Tipp, die Schaltfläche Aktualisieren im Gradle-Tool-Fenster (Ansicht -> Toolfenster -> Gradle) zu verwenden, gut funktioniert.

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