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.

3voto

ismailsunni Punkte 1349

Für eine andere Alternative.

Ich habe dieses Problem auch, wenn ich JDK7_07 verwendet. Ich habe alle Antworten hier ausprobiert (außer das Löschen des IDEA Systemverzeichnisses). Aber ich habe immer noch das Problem. Was ich also getan habe, ist:

Installieren Sie das neueste JDK (es war JDK7_45), und setzen Sie das JDK von Intellij auf das neue, und es funktioniert.

0 Stimmen

Hatte das Problem mit Intellij IDEA 2019.3 und dem mitgelieferten JDK 11.0.3 und löste es durch manuelle Installation von JDK 11.0.4, siehe hier: stackoverflow.com/questions/61338200/

3voto

Arthur Wu Punkte 141

Manchmal öffne ich einfach die Projektstruktur und klicke auf Projekt, dann eine SDK-Version auswählen .

3voto

Sandeep Punkte 43

Das erneute Importieren des Projekts hat bei mir funktioniert. Rechtsklick auf Projekt -> Maven -> Neu importieren

wenn ich File -> Invalidate Caches gewählt und die IDE neu gestartet habe, öffne ich ein Projekt. Es zeigte einen Dialog oben rechts "Maven changes detected" und gab eine Option zum Importieren und Aktivieren des Auto-Imports. Auch nachdem ich das Projekt importiert hatte, hatte ich das gleiche Problem. Der obige Schritt löste das Problem.

3voto

Deniz Husaj Punkte 79

In meinem Fall war mein Projekt mit Lombok und ich vermisste das Lombok Plugin in IntelliJ. Nachdem ich es installiert hatte, funktionierte alles gut.

3voto

Ronald Teune Punkte 53

Die vorgeschlagenen Lösungen haben nicht funktioniert. Ich musste unignore mehrere Projekte, indem Sie mit der rechten Maustaste auf das pom => maven => unignore project klicken.

Dann, nach einer

mvn clean install -T 6 -DskipTests

in der Konsole, war IntelliJ wieder glücklich. Keine Ahnung, wie die Projekte ignoriert wurden...

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