L'ispezione IntelliJ indica "Impossibile risolvere il simbolo" ma compila ancora il codice


569

Piattaforma: IntelliJ Community Edition 10.0.3
SDK: sistema
operativo jdk1.6.0_21 : Windows 7

Quindi ho una strana situazione con IntelliJ che mi ha completamente sconcertato. Ho installato un progetto Maven e ho aggiunto log4j come dipendenza nel file pom.xml. Le ispezioni IDEA funzionano bene e la mia unità testa tutte le operazioni di compilazione ed esecuzione.

Ho quindi aggiunto la libreria jmime di hunnysoft al mio repository maven locale usando mvn install: install-file come segue.

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

Maven ha installato il file jar nel mio repository locale.

Sono quindi passato alle Impostazioni di IntelliJ => Maven => Servizi repository e ho aggiornato il mio repository locale (in modo che IntelliJ reindicizzi i contenuti del repository).

Infine, ho aggiunto la seguente dipendenza al mio file pom.xml (appena sopra la dipendenza log4j).

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

Ora creo una nuova classe come segue:

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

Ora per la stranezza. Il meccanismo delle intenzioni di IntelliJ rileva e riconosce bene l'importazione del Logger nel file maven pom. Tuttavia, per tutte le importazioni di hunnysoft riporta: "Impossibile risolvere il simbolo 'ByteString / Field / FieldBody'", MA Build => Compila 'StackOverflowQuestion.java' compila tutto correttamente e il test unitario che ho creato per questa classe funziona bene (anche se le intenzioni contrassegnano la chiamata a create () anche come area problematica).

Quindi da qualche parte, in qualche modo IntelliJ sta ignorando il file jmime.jar per il sottosistema intenzioni. Sono confuso perché la dipendenza log4j funziona bene e tutto si compila e funziona bene. F12 ("Vai alla dichiarazione") funziona sull'importazione del logger, ma si interrompe su tutte le importazioni di jmime.

Oh, un'altra cosa, se vado alla vista "Pacchetti" nella finestra "Progetti" appare il pacchetto "com.hunnysoft.jmime" e posso vedere TUTTE le classi che ho importato nello snippet di codice sopra sotto "Librerie" . La rimozione della dipendenza sopra dal file pom.xml fa scomparire questo pacchetto e la compilation si interrompe.

Sembra che il percorso di classe dell'ispezione sia interrotto, ma non sembra esserci un'impostazione per questo da nessuna parte in Impostazioni => Intenzioni | Aree del compilatore (non che mi aspettassi tali impostazioni, credo che l'IDEA dovrebbe già conoscere il percorso di classe corretto in base al file pom e JDK).

Come esperimento finale ho creato un nuovissimo progetto standard di applicazione J2SE (senza usare Maven) e ho aggiunto il file jmime.jar direttamente al progetto come una delle sue librerie. Ho riscontrato esattamente gli stessi problemi descritti sopra in questo nuovo progetto.

Ecco MANIFEST.MF dal file jar di jmime.

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.

Non vedo nulla di insolito in questo file jar.

La mia ipotesi migliore è che forse il problema potrebbe essere un problema di dipendenza mancante. Ma si suppone che AFAIK jmime sia autonomo (JarAnalyzer non fornisce nulla, ma non sono sicuro che lo farebbe se manca un vaso di dipendenza).

Quindi, qualcuno ha qualche IDEA?


Vedi anche stackoverflow.com/questions/15046764/… se non è possibile risolvere i simboli che fanno parte delle dipendenze di Maven [per me era M2_HOME mancante]
rogerdpack

1
2018/03/03. Ancora lo stesso errore ...
Dieter,

Risposte:


999

Prima di tutto dovresti provare File | Invalidate Cachese se non aiuta, elimina la directory di sistema IDEA . Quindi reimportare il progetto Maven e vedere se aiuta.

In alcuni casi strani le classi compilate possono riportare informazioni errate e confondere IDEA. Verificare che le classi da questo vaso riportino i nomi corretti utilizzando javap .


1
Ho eliminato i file di progetto, i dirs, ma non è stato fino a quando la cache non valida e il riavvio lo hanno riparato. Grazie per il consiglio! Mi chiedo se non ci sia un modo per farlo automaticamente. Lo penseresti. Voglio dire, ho anche reimportato totalmente il progetto da pom.xml, e non aveva ancora "invalidato" le sue cache.
Antony Stubbs,

9
FWIW, queste correzioni non hanno funzionato per me. Ho un progetto maven che dipende da un altro progetto. Crea lavoro all'interno e all'esterno di IDEA 10.5 ma alcuni dei simboli dell'altro progetto sono contrassegnati in rosso nel progetto dipendente. Cache non valida e riavviata. Senza fortuna. Inoltre rimosso i file IDEA e reimportato il progetto dipendente. Senza fortuna.
pastafarian

10
Grazie per la risposta. Alla fine si è scoperto che dovevo dire a IDEA di "importare il mio progetto Maven usando Maven 3". In Impostazioni-> Maven-> Importazione. Scoperto dopo un lungo scambio di email con support@jetbrains.com.
pastafarian

1
L'opzione di menu è ora "File | Cache / riavvio non valide" (Android Studio 0.8.2, Linux).
Rivestito:

19
invalidate non ha funzionato, non importa quante volte ho provato. Ho eliminato la cartella .idea e quindi reimportato il progetto con build.gradle. Ora funziona.
HelpMatters,

108

Il seguente trucco ha risolto questo problema per me:

  • Fare clic con il tasto destro sull'editor del codice
  • Passa il mouse su Maven ed espandi
  • Fai clic su Reimport

La mia versione dell'idea è 12.0.4


Come posso farlo in IntelliJ per Mac OS?
Ankit Rustagi,

@AnkitRustagi per Mac OS fare clic con il pulsante destro del mouse sulla directory del progetto nel pannello del progetto. Maven -> Reimport. Puoi anche usare il tasto di scelta rapida, Doppio Maiusc + Maiusc + Comando + A e cercare "reimporta tutti i progetti di maven"
Lakota Lefler

5
Il clic destro è un suggerimento per me. Apparentemente il mio pom.xml non è contrassegnato come file maven, quindi ho bisogno di fare clic destro e contrassegnato è come Maven. Ho abilitato "Importa progetti Maven automaticamente" e tutti i pacchetti importati successivamente.
rasyadi,

4
per 2017.1.x sta funzionando reimportare i progetti maven:, View -> Tool Windows -> Maven Projectsquindi fare clic sull'icona delle frecce del ciclo.
Vielinko,

Anche la reimportazione del modulo Maven mi ha aiutato, sono stato sorpreso che non venga reimportato poiché le dipendenze cambiano comunque ...
Rich

37

Nessuna delle soluzioni sopra ha funzionato per me. Quello che ha fatto è stato rimuovere manualmente il file main.iml e all'improvviso ha funzionato.


4
Un grande grazie! Questa è stata anche l'unica soluzione che ha risolto il problema che avevo. Quello che è successo è che il mio progetto è stato rinominato e IntelliJ in qualche modo non ha cancellato i vecchi file .iml in .idea / modules. Eliminare quel file .iml extra e ricostruire il progetto risolto il problema.
Chen,

Lavorato! Grande! Ma sarebbe bello se qualcuno potesse spiegare perché funziona.
Hamza Belmellouki,

1
Dov'è quel file ?? Ho eliminato il <projectname> .idl e ora la struttura del progetto è sparita !! inoltre le impostazioni non possono essere caricate perché il file iml non esiste
KansaiRobot

Funziona perfettamente. Ho provato a cambiare JDK, invalidare le cache, reimportare il progetto, niente ha funzionato. L'eliminazione di main.iml funziona.
rs_

31

Per gli utenti Gradle:

Potrebbe essere necessario sincronizzare il progetto con il build.gradlefile.

Puoi fare clic con il pulsante destro del mouse sul tuo file gradle nel riquadro Progetto per farlo, ma ciò non sembra fare nulla per me (sospetto un bug nella mia versione). Saprai se questo accade perché non darà il via a qualsiasi attività IntelliJ su cui starai aspettando. Invece, apri il riquadro Strumento Gradle , quindi fai clic sul pulsante Sincronizza (aggiorna). Questo ha funzionato per me dove non è stato possibile invalidare la cache e riavviare.

La mia circostanza: stavo usando un progetto Scala con Gradle e dovevo farlo.


Voglio solo dire come nota a margine che avrei dovuto farlo di nuovo dopo aver riformattato un po 'il mio sistema di compilazione; in qualche modo, IntelliJ ha riscontrato alcuni problemi con il mio file build.gradle che non era stato visualizzato in precedenza. Alla fine, è stato in grado di farlo funzionare abbastanza velocemente.
bbarker,

7
Il riquadro degli strumenti Gradle si trova a: View > Tool Windows > Gradle
UTF_or_Death

@bbarker - Ho appena aggiornato IntelliJ alla versione più recente di domenica 6 agosto 2017. Il problema che menzioni in cui si fa clic con il pulsante destro del mouse sul file build.gradle nel riquadro File di progetto e non succede ancora nulla. Per fortuna, il tuo suggerimento per usare il pulsante Aggiorna nella finestra degli strumenti Gradle (Visualizza -> Finestre degli strumenti -> Gradle) ha funzionato alla grande.
Robert Oschler,

Sulla nota dei problemi build.gradle: a volte IntelliJ rileva problemi inesistenti se non si hanno configurazioni di esecuzione. Una volta ho avuto un po 'di strano mavenCentral() could not be resolvedfino a quando non ho aggiunto nuovamente le configurazioni jUnit (avevo portato un intero progetto su Gradle creando un nuovo progetto Gradle, quindi copiando tutti i file sorgente).
Egor Hans,

28

Questo è stato menzionato in un'altra risposta a questa stessa domanda qui , ma questo da solo risolve questo per me. Faccio tutte le mie build in un terminale separato, al di fuori di IntelliJ. Quindi la cache deve avere le autorizzazioni appropriate impostate per l'app IntelliJ per leggerle.

Eseguilo dalla cartella principale del progetto.

$ mvn -U idea:idea

Penso che questo possa aiutare ... ma eseguirlo sfortunatamente dà un timeout di connessione. impossibile connettersi al repository :(
KansaiRobot

mi hai salvato la (seconda metà del) giorno!
Gavriel,

19

Un ulteriore passaggio, quando ho eseguito File -> Cache non valide e riavviato l'IDE, ho aperto un progetto. È spuntato un toastbox in alto a destra chiedendomi se abilitare l'importazione automatica e questo ha risolto il problema.


14

Un'altra cosa da verificare: assicurarsi che le dipendenze non siano duplicate. Nel mio caso ho scoperto che un modulo che mostrava questo comportamento era configurato erroneamente come segue: aveva una dipendenza da un altro modulo e aveva una dipendenza da un vaso prodotto da quell'altro modulo. Ciò significava per ogni simbolo a cui si fa riferimento in duplicato ed era ambiguo.


11

Nomi di modulo incoerenti / duplicati nella struttura del progetto stavano causando questo problema per me.

  1. Vai a File -> Project Strucutre -> Modules
  2. In Fare clic sui moduli che hanno una sottolineatura rossa
  3. Vai alla scheda "Dipendenze"
  4. Assicurarsi che le dipendenze rosse siano effettivamente presenti nell'elenco delle dipendenze. In caso contrario, rinominarli in modo che corrispondano ai nomi delle dipendenze esistenti

Questo può accadere quando IntelliJ non si spegne correttamente e quindi non può salvare correttamente i nomi dei moduli rinominati.


1
Finalmente. Avevo elencato due moduli per qualche motivo, "principale" e il nome del mio progetto. Rimosso principale e gli errori sono scomparsi.
Bobby,

9

È stato pubblicato un fixed? Sembra che il problema riguardasse originariamente la v11 / 12 a causa di una "revisione del compilatore" nel 2013. Con discussione sulle questioni correlate a Jira fino alla fine del 2014. http://youtrack.jetbrains.com/issue/IDEA-98425

Anche su Jira IDEA-98425 è stato contrassegnato come fisso ma non verificato (su v12.0.3). Nessuno dei seguenti work-around risolvere contribuito a questo "grado di risolvere Simbolo" problema con la versione 13.1.1 su Windows

un. Elimina la cartella .IdealIC13 (Quindi, File \ Invalidate Caches / Restart)

b. Dalla finestra dei progetti Maven ,

b.1 mvn -U idea: idea -〉 L'esecuzione di questo obiettivo maven suppone di ricaricare le dipendenze. Funziona in precedenza, ma dall'ultima FRI, l'esecuzione di questo obiettivo maven ha fallito nel tentativo di ricompilare il progetto (ovviamente non riesce come "Impossibile risolvere i simboli", è quello che sto cercando di risolvere eseguendo questo comando in primo luogo) mvn -version - mostra la versione di Maven referenziata 3.2.5 e che funziona

b.2 Fare semplicemente clic con il pulsante destro del mouse su Progetto e Reimport

b.3 File \ Cache non valide / Riavvia

c. Ho provato ad abilitare e disabilitare questa impostazione: File -> Impostazioni -> Maven -> Importazione -> "Usa maven3 per importare il progetto"

d. Settings \ Maven \ Multiproject build fail policy = Fail at end (invece di Default)

Niente funziona. Cosa sta succedendo al supporto IntelliJ su Maven.

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

Dalla cronologia delle versioni di JetBeans, https://www.jetbrains.com/company/history.jsp

IntelliJ v14 NOV 2014

IntelliJ v13 DEC 2013

Suppongo che v12 riparato (anche se non verificato ) sarebbe incorporato nelle versioni successive. Qualcuno ha problemi simili con quale versione di IntelliJ? Per favore, condividi la tua esperienza. Il supporto per IntelliJ Maven sembra interrotto.


Il problema è scomparso ... dopo il progetto "Apri" invece del progetto "Importa" ... dannatamente strano.

Questo ha funzionato per me! :) Ho perso una giornata di lavoro ma ha funzionato. Mi chiedo qual è la differenza tra open e import
Arran,

5

La mia struttura del progetto:

src -> main -> scala -> mypackages

Cosa ha funzionato:

Fare clic destro sulla scalacartella e fare clic su "Segna directory come radice delle origini".


4

Nessuna delle altre risposte ha funzionato per me. Le mie importazioni non venivano risolte perché IntelliJ indicava un file .m2 errato.

Versione IntelliJ: IntelliJ Idea 2018.1.5

La mia posizione per il .m2 directory stata indicata sul percorso sbagliato. Tutto ciò che ho fatto per risolverlo è stato reindirizzare IntelliJ nella directory .m2 corretta e aggiornarlo.

Innanzitutto, vai su: File-> Impostazioni-> Build, Execution, Deployment-> Build Tools-> Maven

Ho dovuto modificare il file delle impostazioni dell'utente: e il repository locale: nella posizione corretta della mia directory .m2.

Dopo questo vai a: File-> Impostazioni-> Build, Execution, Deployment-> Build Tools-> Maven-> Repository

e fai clic sul pulsante Aggiorna.


3

Per un'altra alternativa.

Ho riscontrato questo problema anche quando ho usato JDK7_07. Ho provato tutte le risposte qui (tranne l'eliminazione della directory di sistema IDEA). Ma ho ancora il problema. Quindi quello che ho fatto è:

Installa il JDK più recente (era JDK7_45) e imposta il JDK di Intellij su quello nuovo, e funziona.


Ha avuto il problema con Intellij IDEA 2019.3 e il bundle JDK 11.0.3 e risolto installando manualmente JDK 11.0.4, vedere qui: stackoverflow.com/questions/61338200/…
Benjamin Zach

3

Ho appena avuto questo problema e non sarebbe andato via. Alla fine ho cancellato la directory di configurazione di IntelliJ ~e ho ricostruito il mio progetto IntelliJ da zero. (Ciò ha richiesto solo circa 15 minuti alla fine, rispetto al passare un'ora cercando di risolvere i problemi con i file memorizzati nella cache, ecc.)

Nota che la mia ipotesi è che il problema iniziale sia stato causato da qualcosa del genere javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html(NB: a partire dal 2018, quel link è morto, ma archive.org ha una copia della pagina da quando questa risposta è stata scritta per la prima volta) o un spazio su disco / problema di memoria che causa l'arresto anomalo di Java. IntelliJ sembrava corrotto.


3

Se il tuo progetto maven è un progetto multi-modulo, controlla se alcuni dei moduli sono ignorati da intellij.

  1. Fare clic su Visualizza -> Strumenti di Windows -> Progetti Maven e verificare se alcuni moduli vengono ignorati (i moduli ignorati sono in grigio, ad esempio gs-multi-modulenella seguente immagine).

inserisci qui la descrizione dell'immagine

  1. Fare clic con il tasto destro sul modulo ignorato e scegliere Unignore Projects.

inserisci qui la descrizione dell'immagine

Quindi attendere che intellij finisca l'indicizzazione, dopodiché funzionerà.


2

Sì, sembra che tu debba creare librerie contenenti i JAR necessari e aggiungerli come dipendenza nel tuo modulo.


2

Dopo aver invalidato la cache e riavviato; e confermando che le mie impostazioni di Maven erano a posto, stavo ancora vedendo "Impossibile risolvere il simbolo" per un modulo che avevo sicuramente impostato come dipendenza. Si scopre che l'ho impostato con l'ambito sbagliato.

Puoi controllare facendo clic con il tasto destro sul modulo e selezionando Apri le impostazioni del modulo. Fare clic sulla scheda Dipendenza e verificare che l'ambito della dipendenza non risolvibile sia impostato su Compila.


2

La reimportazione del progetto ha funzionato per me. Fare clic destro su Progetto -> Maven -> Reimport

quando ho fatto File -> Cache non valide e riavviato l'IDE, ho aperto un progetto. Mostrava un dialogo in alto a destra "Rilevati cambiamenti Maven" e offriva un'opzione per importare e abilitare l'importazione automatica. Anche dopo aver importato il progetto qui, ho avuto lo stesso problema. Il passaggio precedente ha risolto il problema.



2

Nel mio caso, sto provando ad aprire un progetto di avvio a molla da IntellijIdea ha avuto lo stesso problema di non riuscire a importare tutti i file relativi a Spring.

Quindi ho fatto:

File -> Chiudi progetto -> Importa progetto -> Importa da modello esterno -> Scegli Gradle -> Avanti -> Seleziona il progetto dalla posizione del file -> Fine

Ora tutto funziona bene come previsto.

Ho visto molte risposte qui, ma ho finalmente trovato questa soluzione. Può usare per qualcuno come me.


1

Nel mio caso, viene rimosso solo buildDir. In questo caso, File | Invalidate Cachesnon funziona.

Quando lo faccio Build | Make Projectprima File | Invalidate Caches, tutto funziona bene.


ha generato un errore: Java errore rilascio vestion 5 non è supportato
KansaiRobot

@KansaiRobot Sembra che tu abbia il tuo progetto configurato per usare Java 5. La maggior parte delle librerie al giorno d'oggi richiedono almeno Java 8, e non ci sono molte ragioni per usare qualcosa di più basso (molte cose sono successe nel JDK, sia in termini di nuove funzionalità che di prestazioni) , quindi riprovare con Java 8 o versioni successive.
Egor Hans,

1
  1. Apri "Impostazioni"
  2. Cerca "Maven"
  3. Fai clic su "File ignorati" in "Maven"
  4. Deseleziona i file pom.xml che contengono le dipendenze mancanti
  5. Fai clic su "OK"
  6. Fare clic su File -> Cache non valide / Riavvia ...
  7. Fai clic su "Invalida e riavvia"

non ci sono pom.xml sullo schermo in 4,
KansaiRobot

1

Nessuna delle soluzioni di cui sopra ha risolto il problema per me. Ho avuto lo stesso problema in cui il codice è stato compilato correttamente, ma IntelliJ ha dimostrato che non è stato possibile trovare l'importazione. Anche se IntelliJ ha suggerito l'importazione in primo luogo dal completamento del codice.

La mia soluzione era spostare tutto nel pacchetto predefinito, eliminare il com.foo.barpacchetto, quindi crearlo di nuovo e spostare tutto indietro.


1

Le soluzioni suggerite non hanno funzionato. Ho dovuto annullare il progetto di diversi progetti, facendo clic con il tasto destro sul progetto pom => maven => unignore.

Quindi dopo a

mvn clean install -T 6 -DskipTests

nella console, IntelliJ era di nuovo felice. Non ho idea di come i progetti siano stati ignorati ...


1

mvn idea:ideaha funzionato per me. L'ho trovato qui . Trascorso più di un'ora, spero che aiuti qualcuno


1

Rimuovere il file: iml trovato in Java e testare le cartelle all'interno del progetto, invalidare e riavviare.

Mi verrà chiesto di rimuovere i progetti. Metti Sì. L'errore si spegnerà.


1

Quello che ha funzionato per me è stato "Contrassegna come directory root di directory" la directory in cui si trovava la classe contrassegnata in rosso, dopo di che il segno rosso è scomparso. Sembra che per qualche motivo non sia stato contrassegnato.


1

Per i progetti Gradle:

  1. Esci da IntelliJ IDEA
  2. Elimina la <problematic-project-root>/.ideadirectory
  3. Elimina la <problematic-project-root>/.gradledirectory
  4. Elimina tutti i .imlfile in<problematic-project-root>
    • prompt dei comandi di windows :DEL /S /Q *.iml
    • linux: find . | grep -e .iml$ | xargs rm
  5. Reimportare il progetto in IntelliJ IDEA con Gradle

0

se progetto maven, basta andare su impostazioni -> strumenti di costruzione -> maven -> importazione. selezionare la casella di controllo "importa automaticamente progetto maven". risolverà il problema.


0

Cache non valide ha funzionato per me, ma dopo aver eseguito l'applicazione ha avuto lo stesso errore.

Quindi ho provato ( Intellij ):

1 - Barra dei menu - Refactor | Build | Esegui | Strumenti: fai clic su Crea, quindi su Ricostruisci progetto

2 - MVN pulito

3 - Fare clic con il tasto destro del mouse sul progetto> Maven> Genera origini e Aggiorna cartella

Spero che questo funzioni per te.

Grazie


0

O forse il file che importi è troppo grande. Questo è il mio caso, quando cambio la proprietà Intellij: iead.max.intellisen.filesize (il percorso è $ {idea dir} /bin/idea.properties) su un valore più grande, come 25000 e riavviare l'IDE, il problema è scomparso. Spero che sia di aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.