java - run - Die IntelliJ-Überprüfung gibt "Symbol kann nicht aufgelöst werden", kompiliert aber trotzdem Code




intellij run inspection by name (20)

  1. Einstellungen öffnen"
  2. Suche nach "Maven"
  3. Klicken Sie auf "Ignorierte Dateien" unter "Maven"
  4. Deaktivieren Sie die pom.xml-Dateien, die die fehlenden Abhängigkeiten enthalten
  5. OK klicken"
  6. Klicken Sie auf Datei -> Caches ungültig machen / Neustart ...
  7. Klicken Sie auf "Invalidate und Restart"

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 habe ein Maven-Projekt eingerichtet und log4j als Abhängigkeit in der Datei pom.xml hinzugefügt. Die IDEA Inspektionen laufen gut und meine Einheit testet alle Kompilieren und Ausführen.

Dann habe ich die jmime-Bibliothek von hunnysoft zu meinem lokalen maven-Repository hinzugefügt, indem ich die mvn install: install-Datei wie folgt verwende.

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

Maven hat die JAR-Datei einfach in mein lokales Repository installiert.

Ich ging dann in IntelliJ Einstellungen => Maven => Repository Services und aktualisiert mein lokales Repository (so dass IntelliJ den Inhalt des Repository neu indizieren würde).

Schließlich fügte ich meiner pom.xml-Datei die folgende Abhängigkeit hinzu (direkt über der log4j-Abhängigkeit).

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

Ich erstelle jetzt 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;
    }
}

Jetzt für die Seltsamkeit. IntelliJs Intentionsmechanismus greift auf und erkennt den Logger-Import in der Maven-Pom-Datei ganz gut. Für alle hunnysoft-Importe gibt es jedoch Folgendes aus: "Das Symbol 'ByteString / Field / FieldBody' kann nicht aufgelöst werden", aber Build => Compile 'StackOverflowQuestion.java' kompiliert alles korrekt und der Einheitentest, den ich für diese Klasse erstellt habe, läuft einwandfrei Die Intentionen markieren den Aufruf von create () als Problembereich.

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

Oh, noch eine andere Sache, wenn ich in die "Packages" Ansicht im "Projects" Fenster gehe, erscheint das "com.hunnysoft.jmime" Paket und ich kann ALLE Klassen sehen, die ich in das Code Snippet oben unter "Libraries" importiert habe . Wenn Sie die obige Abhängigkeit von der Datei pom.xml entfernen, verschwindet dieses Paket und die Kompilierung bricht ab.

Es scheint, dass der Klassenpfad der Inspektion unterbrochen ist, aber es scheint keine Einstellung dafür in den Einstellungen => Absichten | Compiler-Bereiche (nicht, dass ich solche Einstellungen erwartet hätte, glaube ich, dass die IDEA bereits den korrekten Klassenpfad basierend auf der Pom-Datei und dem JDK kennen sollte).

Als abschließendes Experiment habe ich ein brandneues Standard-J2SE-Anwendungsprojekt erstellt (ohne Maven zu verwenden) und die jmime.jar-Datei direkt als eine ihrer Bibliotheken in das Projekt eingefügt. Ich habe genau die gleichen Probleme wie oben in diesem neuen Projekt 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 in dieser Jar-Datei nichts Ungewöhnliches.

Meine beste Vermutung ist, dass das Problem möglicherweise ein fehlendes Abhängigkeitsproblem ist. Aber AFAIK jmime soll in sich abgeschlossen sein (JarAnalyzer bringt nichts, aber ich bin mir nicht sicher, ob ein Abhängigkeitsglas fehlen würde).

Also, hat jemand irgendwelche IDEAs?


Als erstes solltest du File | Invalidate Caches ausprobieren File | Invalidate Caches und wenn es nicht hilft, löschen Sie das IDEA-Systemverzeichnis . Dann importieren Sie das Maven-Projekt erneut und sehen Sie, ob es hilft.

In einigen komischen Fällen können kompilierte Klassen falsche Informationen melden und IDEA verwirren. javap dass die Klassen aus diesem Jar korrekte Namen mithilfe von javap .


Das wurde oben erwähnt, aber das allein behebt das für mich. Ich mache alle meine Builds in einem separaten Terminal außerhalb von IntelliJ. Der Cache muss also die richtigen Berechtigungen haben, damit die IntelliJ-App sie lesen kann.

Führen Sie es aus dem Stammordner des Projekts aus.

$ mvn -U idea:idea

Der folgende Trick löste dieses Problem für mich:

  • Klicken Sie mit der rechten Maustaste auf den Code-Editor
  • Schwebe auf Maven und expandiere
  • Klicken Sie auf Reimport

Meine Ideenversion ist 12.0.4


Ein zusätzlicher Schritt, als ich Datei -> Caches ungültig machen und die IDE neu gestartet habe, ein Projekt öffnen. Es tauchte oben rechts eine Toastbox auf und fragte mich, ob ich den Auto-Import aktivieren solle, und das habe das Problem gelöst.


Eine andere Sache zu überprüfen: Stellen Sie sicher, dass Abhängigkeiten nicht dupliziert sind. In meinem Fall stellte ich fest, dass ein Modul, das dieses Verhalten aufwies, wie folgt falsch konfiguriert war: Es hatte eine Abhängigkeit von einem anderen Modul und es hatte eine Abhängigkeit von einem Jar, der von diesem anderen Modul erzeugt wurde. Dies bedeutete für jedes doppelt referenzierte Symbol und war mehrdeutig.


Für Intellij Idea-Benutzer können diese Befehle vor dem Import eines Projekts helfen:

./gradlew bauen . / gradlew Idee


Für eine andere Alternative.

Ich habe dieses Problem auch, als ich JDK7_07 verwendet habe. Ich habe hier alle Antworten versucht (außer das IDEA System Directory zu löschen). Aber ich habe immer noch das Problem. Also was ich getan habe ist:

Installiere das neueste JDK (es war JDK7_45) und setze das Intellij JDK auf das neue JDK, und es funktioniert.


Ich hatte gerade dieses Problem und es würde einfach nicht verschwinden. Ich löschte schließlich das IntelliJ-Konfigurationsverzeichnis in ~ und baute mein IntelliJ-Projekt von Grund auf neu. (Dies dauerte am Ende etwa 15 Minuten, verglichen mit einer Stunde, in der versucht wurde, Probleme mit zwischengespeicherten Dateien zu lösen usw.)

Bearbeiten: Beachten Sie, dass meine Vermutung ist, dass das ursprüngliche Problem durch etwas wie http://javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html oder einen Speicherplatz verursacht wurde / Speicherproblem verursacht Java zum Absturz. IntelliJ schien nur korrupt zu werden.


In meinem Fall tauchte dieses Problem auf, nachdem ich eine große Umstrukturierung der Dateien in meinem Maven-Projekt ausgetestet hatte. Zum Zeitpunkt des Check-out hatte ich einige meiner eigenen unchecked in Änderungen noch aktiv. Soweit ich feststellen konnte, wurden die Änderungen an keiner der Dateien geändert.

Den Cache ungültig zu machen und neu zu starten funktionierte nicht für mich. Was war Arbeit?

  • Die Änderungen, die ich vor der großen Umstrukturierung vorgenommen hatte, wurden rückgängig gemacht
  • Alle Maven-Module erneut importieren

Inkonsistente / doppelte Modulnamen in der Projektstruktur verursachten dieses Problem für mich.

  1. Gehe zu File -> Project Strucutre -> Modules
  2. Klicken Sie auf Module, die rot unterstrichen sind
  3. Gehe zum Tab "Abhängigkeiten"
  4. Stellen Sie sicher, dass die Abhängigkeiten, die rot sind, tatsächlich in der Abhängigkeitsliste vorhanden sind. Wenn nicht, benennen Sie sie um, damit sie den vorhandenen Abhängigkeitsnamen entsprechen

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


Invalidate Caches funktionierte für mich, aber nach dem Ausführen der Anwendung hatte den gleichen Fehler.

Also habe ich es versucht ( Intellij ):

1 - Menüleiste - Refactor | Erstellen | Lauf | Extras - Klicken Sie auf Erstellen und dann auf Projekt neu erstellen

2 - MVN sauber

3 - Klicken Sie mit der rechten Maustaste auf Projekt> Maven> Quellen generieren und Ordner aktualisieren

Hoffe das funktioniert für dich.

Vielen Dank


Keine der obigen Lösungen funktionierte für mich. Was tat, war das Entfernen der Datei main.iml manuell und es funktionierte plötzlich.


Keine der obigen Lösungen hat es für mich gelöst. Ich hatte das gleiche Problem, wo der Code gut kompiliert wurde, aber IntelliJ zeigte, dass es den Import nicht finden konnte. Obwohl IntelliJ den Import von Code-Vervollständigung an erster Stelle vorgeschlagen hat.

Meine Lösung bestand darin, alles in das Standardpaket zu verschieben, das Paket com.foo.bar löschen, es dann erneut zu erstellen und alles zurück zu verschieben.


Manchmal öffne ich einfach die Projektstruktur und klicke auf Projekt und wähle dann eine SDK-Version .


Manchmal, wenn Sie ein Paket wie com.mydomain.something erstellen, wird die Verzeichnisstruktur nicht erstellt und Sie bleiben mit einem einzigen Ordner namens "com.mydomain.irgendetwas" in diesem Fall sollten Sie eine Verzeichnisstruktur erstellen, wie

com
|_mydomain
  |_something 

Nach dem Ungültigmachen meines Caches und dem Neustart; und bestätigen meiner Maven-Einstellungen waren in Ordnung, ich sah immer noch "Kann nicht auflösen Symbol" für ein Modul, das ich definitiv als Abhängigkeit festgelegt hatte. Es stellte sich heraus, dass ich es auf den falschen Bereich eingestellt hatte.

Sie können dies überprüfen, indem Sie mit der rechten Maustaste auf Ihr Modul klicken und Moduleinstellungen öffnen auswählen. Klicken Sie auf die Registerkarte Abhängigkeit, und vergewissern Sie sich, dass der Bereich für Ihre nicht auflösbare Abhängigkeit auf Kompilieren festgelegt ist.


Oder vielleicht ist die Datei, die Sie importieren, zu groß. Das ist mein Fall, wenn ich die Intellij-Eigenschaft: iead.max.intellisen.filesize (Pfad ist $ {idea dir} /bin/idea.properties) auf einen größeren Wert, wie 25000, und starten Sie die IDE neu, das Problem ist verschwunden. Hoffe das hilft.


Wurde ein Fixed veröffentlicht? Erscheint Problem ursprünglich betroffen v11 / 12 aufgrund einer "Compiler-Überholung" zurück im Jahr 2013. Mit Diskussion über damit verbundene Probleme in Jira bis Ende 2014. http://youtrack.jetbrains.com/issue/IDEA-98425

Auch auf Jira IDEA-98425 wurde behoben, aber nicht überprüft (auf v12.0.3). Keines der folgenden Probleme hat dazu beigetragen, das Problem "Symbol kann nicht gelöst werden " mit Version 13.1.1 unter Windows zu beheben

ein. Delete .IdealIC13- Ordner (Dann, Datei \ Invalidate Caches / Restart)

b. Von Maven Projects Fenster,

b.1 mvn -U Idee: Idee -> Das Ausführen dieses Mavenziels setzt voraus, dass die Abhängigkeiten neu geladen werden. Dies funktioniert prev, aber seit dem letzten FRI ist das Ausführen dieses Maven-Ziels fehlgeschlagen, als es versuchte, das Projekt neu zu kompilieren (Natürlich schlägt es fehl als "Unable to Resolve Symbols", das versuche ich zu beheben, indem ich diesen Befehl ausführe) mvn -version - zeigt Maven-Version mit der Referenznummer 3.2.5 und dass es funktioniert

b.2 Einfach Rechtsklick Projekt und Reimport

b.3 Datei \ Invalidate Caches / Neustart

c. Versucht beide Aktivieren und Deaktivieren Sie diese Einstellung: Datei -> Einstellungen -> Maven -> Importieren -> "Maven3 verwenden, um Projekt zu importieren"

d. Settings \ Maven \ Multiproject Buildfehlerrichtlinie = Fehler am Ende (anstelle von Standard)

Nichts funktioniert. Was passiert mit IntelliJ Support auf Maven?

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

Aus dem Veröffentlichungsverlauf von JetBeans, https://www.jetbrains.com/company/history.jsp

IntelliJ v14 NOV 2014

IntelliJ v13 DEZ 2013

Ich würde annehmen, dass v12 fixed (obwohl nicht verifiziert ) in nachfolgenden Releases enthalten sein würde. Hat jemand ähnliche Probleme mit der IntelliJ-Version? Bitte teilen Sie Ihre Erfahrung. IntelliJ Maven Unterstützung scheint gebrochen.


mvn idea:idea hat für mich funktioniert. Habe es here . Verbrachte mehr als eine Stunde, hoffe, es hilft jemandem







intellij-inspections