La inspección de IntelliJ proporciona "No se puede resolver el símbolo" pero aún compila el código

569

Plataforma: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
SO: Windows 7

Así que tengo una situación extraña con IntelliJ que me tiene completamente perplejo. Configuré un proyecto Maven y agregué log4j como una dependencia en el archivo pom.xml. Las inspecciones de IDEA funcionan bien y mi unidad prueba todas las compilaciones y ejecuciones.

Luego agregué la biblioteca jmime de hunnysoft a mi repositorio local de maven usando mvn install: install-file de la siguiente manera.

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

Maven instaló el archivo jar muy bien en mi repositorio local.

Luego entré en Configuración de IntelliJ => Maven => Servicios de repositorio y actualicé mi repositorio local (para que IntelliJ reindexara el contenido del repositorio).

Finalmente, agregué la siguiente dependencia a mi archivo pom.xml (justo arriba de la dependencia log4j).

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

Ahora creo una nueva clase de la siguiente manera:

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

Ahora por la rareza. El mecanismo de intención de IntelliJ recoge y reconoce la importación de Logger en el archivo pom maven muy bien. Sin embargo, para todas las importaciones de hunnysoft, informa: "No se puede resolver el símbolo 'ByteString / Field / FieldBody'", PERO Build => Compile 'StackOverflowQuestion.java' compila todo correctamente y la prueba de unidad que creé para esta clase funciona bien (aunque las intenciones marcan la llamada a create () como un área problemática también).

Entonces, en alguna parte, IntelliJ ignora el archivo jmime.jar para el subsistema de intención. Estoy confundido porque la dependencia log4j funciona bien y todo se compila y funciona bien. F12 ("Ir a la declaración") funciona en la importación del registrador, pero se interrumpe en todas las importaciones de jmime.

Ah, otra cosa, si voy a la vista 'Paquetes' en la ventana "Proyectos" aparece el paquete "com.hunnysoft.jmime" y puedo ver TODAS las clases que importé en el fragmento de código de arriba en "Bibliotecas" . Al eliminar la dependencia anterior del archivo pom.xml, este paquete desaparece y la compilación se rompe.

Parece que la ruta de clase de la inspección está rota, pero no parece haber una configuración para esto en ninguna parte de Configuración => Intenciones | Áreas del compilador (no es que esperara ninguna configuración de este tipo, creo que IDEA ya debería conocer la ruta de clase correcta basada en el archivo pom y JDK).

Como experimento final, creé un nuevo proyecto de aplicación estándar J2SE (sin usar maven) y agregué el archivo jmime.jar directamente al proyecto como una de sus bibliotecas. Me encuentro exactamente con los mismos problemas descritos anteriormente en este nuevo proyecto.

Aquí está el MANIFEST.MF del archivo jar 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.

No veo nada inusual en este archivo jar.

Mi mejor conjetura es que quizás el problema podría ser un problema de dependencia que falta. Pero se supone que AFAIK jmime es autónomo (JarAnalyzer no presenta nada, pero no estoy seguro de que lo haría si falta un jar de dependencia).

Entonces, ¿alguien tiene alguna IDEA?

Kevin Sitze
fuente
Vea también stackoverflow.com/questions/15046764/… si no puede resolver los símbolos que son parte de las dependencias de maven [para mí era un M2_HOME faltante]
rogerdpack
1
2018.3.3. Sigue siendo el mismo error ...
dieter

Respuestas:

999

En primer lugar, debe intentarlo File | Invalidate Cachesy, si no funciona, elimine el directorio del sistema IDEA . Luego vuelva a importar el proyecto Maven y vea si ayuda.

En algunos casos extraños, las clases compiladas pueden informar información incorrecta y confundir IDEA. Verifique que las clases de este jar reporten nombres correctos usando javap .

CrazyCoder
fuente
1
Eliminé archivos de proyecto, directorios, pero no fue hasta que el caché invalidar y reiniciar lo reparó. ¡Gracias por el consejo! Me pregunto si no hay alguna manera de que esto se haga automáticamente. Tú lo pensarías así. Quiero decir, incluso reimporté totalmente el proyecto desde pom.xml, y todavía no había "invalidado" sus cachés.
Antony Stubbs
99
FWIW, estas soluciones no funcionaron para mí. Tengo un proyecto maven que depende de otro proyecto. Construye trabajo dentro y fuera de IDEA 10.5, pero algunos de los símbolos del otro proyecto están marcados en rojo en el proyecto dependiente. Caché invalidado y reiniciado. Sin suerte. También eliminó los archivos IDEA y volvió a importar el proyecto dependiente. Sin suerte.
pastafarian
10
Gracias por la respuesta. Resultó ser, finalmente, que tuve que decirle a IDEA que "importara mi proyecto Maven usando Maven 3". En Configuración-> Maven-> Importar. Descubierto después de un largo intercambio de correos electrónicos con [email protected].
pastafarian
1
La opción de menú ahora es "Archivo | Invalidar cachés / reiniciar" (Android Studio 0.8.2, linux).
CoatedMoose
19
invalidar no funcionó, no importa cuántas veces lo intenté. Eliminé la carpeta .idea y luego volví a importar el proyecto con build.gradle. Ahora funciona.
HelpMatters
108

El siguiente truco resolvió este problema para mí:

  • Haga clic derecho en el editor de código
  • Desplázate sobre Maven y expande
  • Haga clic en Reimportar

Mi idea es la versión 12.0.4

rshahriar
fuente
¿Cómo hago esto en IntelliJ para Mac OS?
Ankit Rustagi
@AnkitRustagi para Mac OS haga clic derecho en el directorio del proyecto en el panel del proyecto. Maven -> Reimportar. También puede usar la tecla de acceso rápido, doble toque shift o Shift + Command + A, y buscar "reimportar todos los proyectos de Maven"
Lakota Lefler
55
El clic derecho es una pista para mí. Aparentemente mi pom.xml no está marcado como archivo maven, por lo tanto, necesito hacer clic derecho y marcarlo como Maven. He habilitado 'Importar proyectos de Maven automáticamente' y todos los paquetes importados después de eso.
rasyadi
44
para 2017.1.x está funcionando reimportar proyectos maven:, View -> Tool Windows -> Maven Projectsluego haga clic en el icono de las flechas del ciclo.
Vielinko
Volver a importar el módulo Maven me ayudó demasiado, me sorprendió que no se reimportado como dependencias cambian todos modos ...
Rich
37

Ninguna de las soluciones anteriores funcionó para mí. Lo que hizo fue eliminar el archivo main.iml manualmente y de repente funcionó.

cerisier
fuente
44
¡Muchas gracias! Esta también fue la única solución que resolvió el problema que tenía. Lo que sucedió fue que mi proyecto cambió de nombre e IntelliJ de alguna manera no borró los viejos archivos .iml en .idea / modules. Eliminar esos archivos .iml adicionales y reconstruir el proyecto solucionó el problema.
Chen
¡Trabajó! ¡Excelente! Pero sería bueno si alguien pudiera explicar por qué funciona.
Hamza Belmellouki
1
¿Dónde está ese archivo? Eliminé el <nombre del proyecto> .idl y ahora la estructura del proyecto se ha ido. además, la configuración no se puede cargar porque el archivo iml no existe
KansaiRobot
Funciona perfectamente Intenté cambiar JDK, invalidar cachés, volver a importar el proyecto, nada funcionó. Eliminar main.iml funciona.
rs_
31

Para usuarios de Gradle:

Es posible que deba sincronizar su proyecto con su build.gradlearchivo.

Puede hacer clic derecho en su archivo gradle debajo del panel Proyecto para hacer esto, pero eso no pareció hacer nada por mí (sospecho que hay un error en mi versión). Sabrá si esto sucede porque no iniciará ninguna tarea de IntelliJ que estará esperando. En su lugar, abra el panel de la herramienta Gradle , luego haga clic en el botón sincronizar (actualizar). Esto funcionó para mí donde invalidar el caché y reiniciar no lo hizo.

Mi propia circunstancia: estaba usando un proyecto Scala con Gradle y tuve que hacer esto.

bbarker
fuente
Solo quiero decir como nota al margen que necesitaba volver a hacer esto después de refactorizar un poco mi sistema de compilación; de alguna manera, IntelliJ detectó algunos problemas con mi archivo build.gradle que no aparecían anteriormente. Al final, pude hacer que todo funcionara bastante rápido.
bbarker
77
El panel de la herramienta Gradle está en: View > Tool Windows > Gradle
UTF_or_Death
@bbarker: acabo de actualizar IntelliJ a la última versión a partir del domingo 6 de agosto de 2017. El problema que menciona es que al hacer clic con el botón derecho en el archivo build.gradle en el panel de archivos del proyecto y todavía no sucede nada. Afortunadamente, su consejo para usar el botón Actualizar en la ventana de la herramienta Gradle (Ver -> Ventanas de herramientas -> Gradle) funcionó muy bien.
Robert Oschler
En la nota de los problemas de build.gradle: a veces IntelliJ encuentra problemas no existentes si no tiene configuraciones de ejecución. Una vez tuve algo extraño mavenCentral() could not be resolvedhasta que volví a agregar las configuraciones de jUnit (había portado un proyecto completo a Gradle al hacer un nuevo proyecto de Gradle y luego copiar todos los archivos de origen).
Egor Hans
28

Esto se mencionó en otra respuesta a esta misma pregunta aquí , pero esto solo me soluciona esto. Hago todas mis compilaciones en una terminal separada, fuera de IntelliJ. Por lo tanto, la caché debe tener los permisos adecuados establecidos para que la aplicación IntelliJ los lea.

Ejecútelo desde la carpeta raíz del proyecto.

$ mvn -U idea:idea
Tom
fuente
Creo que esto podría ayudar ... pero desafortunadamente ejecutarlo da un tiempo de espera de conexión. no se pudo conectar al repositorio :(
KansaiRobot
me salvaste la (segunda mitad del día)
Gavriel
19

Un paso adicional, cuando hice File -> Invalidate Caches y reinicié el IDE, abrí un proyecto. Apareció un toastbox en la esquina superior derecha preguntándome si habilitar la importación automática y eso resolvió el problema.

Matthew Chen
fuente
14

Otra cosa para verificar: asegúrese de que las dependencias no estén duplicadas. En mi caso, descubrí que un módulo que exhibía este comportamiento estaba mal configurado de la siguiente manera: tenía una dependencia de otro módulo y una dependencia de un jar producido por ese otro módulo. Esto significaba para cada símbolo referenciado por duplicado, y era ambiguo.

Landon Kuhn
fuente
11

Los nombres de módulos inconsistentes / duplicados en la estructura del proyecto me estaban causando este problema.

  1. Ir File -> Project Strucutre -> Modules
  2. Haga clic en los módulos que tienen subrayado rojo
  3. Llegué a la pestaña "Dependencias"
  4. Asegúrese de que las dependencias que son rojas realmente existan en la lista de dependencias. De lo contrario, cámbieles el nombre para que coincidan con los nombres de dependencia existentes

Esto puede suceder cuando IntelliJ no se apaga correctamente y, por lo tanto, no puede guardar correctamente los nombres de módulos renombrados.

Babken Vardanyan
fuente
1
Finalmente. Tenía dos módulos listados por alguna razón, "main" y el nombre de mi proyecto. Eliminado main, y los errores desaparecieron.
Bobby
9

¿Se ha publicado un arreglo? Parece que el problema afectó originalmente a v11 / 12 debido a una "revisión del compilador" en 2013. Con una discusión sobre temas relacionados en Jira hasta finales de 2014. http://youtrack.jetbrains.com/issue/IDEA-98425

También en Jira IDEA-98425 se marcó fijo pero no verificado (en v12.0.3). Ninguno de los siguientes trabajo en torno a la determinación ayudado a este "No se puede resolver símbolo" problema con la versión 13.1.1 en Windows

a. Eliminar la carpeta .IdealIC13 (luego, Archivo \ Invalidar cachés / reiniciar)

si. Desde la ventana de Proyectos Maven ,

b.1 mvn -U idea: idea -〉 Ejecutar este objetivo maven supone recargar las dependencias. Esto funciona anterior, pero desde el último FRI, la ejecución de este objetivo maven falló al intentar recompilar el proyecto (por supuesto, falla como "No se pueden resolver los símbolos", eso es lo que estoy tratando de solucionar ejecutando este comando en primer lugar) mvn -version - muestra la versión de Maven referenciada 3.2.5 y que está funcionando

b.2 Simplemente haga clic con el botón derecho en el proyecto y vuelva a importar

b.3 Archivo \ Invalidar cachés / reiniciar

C. Intenté habilitar y deshabilitar esta configuración: Archivo -> Configuración -> Maven -> Importar -> "Usar maven3 para importar proyecto"

re. Configuración \ Maven \ Multiproject build fail policy = Fail at end (en lugar de Default)

Nada funciona. ¿Qué está pasando con el soporte IntelliJ en Maven?

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

Desde el historial de lanzamientos de JetBeans, https://www.jetbrains.com/company/history.jsp

IntelliJ v14 NOV 2014

IntelliJ v13 DEC 2013

Supongo que v12 fijo (aunque no verificado ) se incorporaría en versiones posteriores. ¿Alguien tiene problemas similares con qué versión de IntelliJ? Por favor comparte tu experiencia. El soporte de IntelliJ maven parece roto.


fuente
El problema desapareció ... después de "Abrir" el proyecto en lugar del proyecto "Importar" ... malditamente extraño.
¡Esto funcionó para mí! :) Perdí un día de trabajo pero funcionó. Me pregunto cuál es la diferencia entre abrir e importar
Arran
5

Estructura de mi proyecto:

src -> main -> scala -> mypackages

Lo que funcionó:

Haga clic derecho en la scalacarpeta y haga clic en "Marcar directorio como raíz de fuentes".

axioma
fuente
4

Ninguno de los otros respondedores trabajó para mí. Mis importaciones no se resolvieron porque IntelliJ señaló un archivo .m2 incorrecto.

Versión IntelliJ: IntelliJ Idea 2018.1.5

Mi ubicación para el directorio .m2 apuntaba a la ruta incorrecta. Todo lo que hice para solucionarlo fue volver a apuntar IntelliJ al directorio .m2 correcto y actualizarlo.

Primero, vaya a: Archivo-> Configuración-> Compilación, Ejecución, Implementación-> Herramientas de compilación-> Maven

Tuve que cambiar el archivo de configuración del usuario: y el repositorio local: a la ubicación correcta de mi directorio .m2.

Después de esto, vaya a: Archivo-> Configuración-> Compilación, Ejecución, Implementación-> Herramientas de compilación-> Maven-> Repositorios

y haga clic en el botón Actualizar.

Tim
fuente
3

Por otra alternativa.

También tuve este problema cuando usé JDK7_07. Intenté todas las respuestas aquí (excepto eliminar el directorio del sistema IDEA). Pero, todavía tengo el problema. Entonces lo que hice es:

Instale el JDK más nuevo (era JDK7_45) y configure el JDK de Intellij en el nuevo, y funciona.

ismailsunni
fuente
Tuve el problema con Intellij IDEA 2019.3 y el paquete JDK 11.0.3 y lo resolvió instalando manualmente JDK 11.0.4, consulte aquí: stackoverflow.com/questions/61338200/…
Benjamin Zach
3

Acabo de tener este problema y simplemente no desaparecería. Finalmente eliminé el directorio de configuración de IntelliJ ~y reconstruí mi proyecto IntelliJ desde cero. (Esto solo tardó unos 15 minutos al final, en comparación con pasar una hora tratando de resolver problemas con archivos en caché, etc.)

Tenga en cuenta que mi suposición es que el problema inicial fue causado por algo como javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html(Nota: a partir de 2018, ese enlace está muerto, pero archive.org tiene una copia de la página de alrededor cuando esta respuesta se escribió por primera vez) o un problema de espacio en disco / memoria que causa el bloqueo de Java. IntelliJ parecía corromperse.

mozboz
fuente
3

Si su proyecto maven es un proyecto de varios módulos, verifique si intellij ignora algunos de los módulos.

  1. Haga clic en Ver -> Herramientas Windows -> Proyectos Maven, y verifique si algunos módulos son ignorados (los módulos ignorados están en gris, por ejemplo, gs-multi-moduleen la siguiente imagen).

ingrese la descripción de la imagen aquí

  1. Haga clic derecho en el módulo ignorado y elija Unignore Projects.

ingrese la descripción de la imagen aquí

Luego espere a que intellij termine de indexar, después de lo cual funcionará.

Searene
fuente
2

Sí, parece que tiene que crear bibliotecas que contengan los JAR que necesita y agregarlos como una dependencia en su módulo.

duffymo
fuente
2

Después de invalidar mi caché y reiniciar; y confirmando que mi configuración de Maven estaba bien, seguía viendo "No se puede resolver el símbolo" para un módulo que definitivamente había configurado como una dependencia. Resulta que lo tenía configurado en el alcance incorrecto.

Puede verificar haciendo clic derecho en su módulo y seleccionando Abrir configuración de módulo. Haga clic en la pestaña de dependencia y verifique que el alcance de su dependencia no resoluble esté configurado en Compilar.

usuario3565334
fuente
2

Reimportar el proyecto funcionó para mí. Haga clic derecho en Proyecto -> Maven -> Reimportar

cuando hice File -> Invalidate Caches y reinicié el IDE, abrí un proyecto. Mostró un diálogo en la parte superior derecha "Cambios detectados de Maven" y dio una opción para importar y habilitar la importación automática. Incluso después de importar el proyecto aquí, tuve el mismo problema. El paso anterior resolvió el problema.

Sandeep
fuente
2

En mi caso, estoy tratando de abrir un proyecto de inicio de Spring desde IntellijIdea, tuve el mismo problema, como no poder importar todos los archivos relacionados con Spring.

Entonces hice:

Archivo -> Cerrar proyecto -> Importar proyecto -> Importar desde modelo externo -> Elija Gradle -> Siguiente -> Seleccione el proyecto desde la ubicación del archivo -> Finalizar

Ahora todo funciona bien como se esperaba.

He visto muchas respuestas aquí, pero finalmente encontré esta solución. Puede usarse para alguien como yo.

Shylendra Madda
fuente
1

En mi caso, solo se elimina buildDir. En este caso, File | Invalidate Cachesno funciona.

Cuando lo hago Build | Make Projectantes File | Invalidate Caches, todo funciona bien.

chiguri
fuente
arrojó un error: no se admite la versión 5 de la versión de error de Java
KansaiRobot
@KansaiRobot Suena como si tu proyecto estuviera configurado para usar Java 5. La mayoría de las bibliotecas de hoy en día requieren al menos Java 8, y no hay muchas razones para usar algo más bajo (muchas cosas sucedieron en el JDK, tanto en términos de nuevas características como de rendimiento) , intente nuevamente con Java 8 o superior.
Egor Hans
1
  1. Configuración abierta"
  2. Se buscó el término "Maven"
  3. Haga clic en "Archivos ignorados" en "Maven"
  4. Desmarque los archivos pom.xml que contienen las dependencias que faltan
  5. Haga clic en Aceptar"
  6. Haga clic en Archivo -> Invalidar cachés / reiniciar ...
  7. Haga clic en "Invalidar y reiniciar"
Jasper Citi
fuente
no hay pom.xml en la pantalla en 4,
KansaiRobot
1

Ninguna de las soluciones anteriores me lo resolvió. Tuve el mismo problema donde el código se compiló bien, pero IntelliJ mostró que no podía encontrar la importación. Aunque IntelliJ sugirió la importación en primer lugar desde la finalización del código.

Mi solución fue mover todo al paquete predeterminado, eliminar el com.foo.barpaquete, luego crearlo nuevamente y mover todo de nuevo.

jmhage
fuente
1

Las soluciones sugeridas no funcionaron. Tuve que ignorar varios proyectos, haciendo clic derecho en pom => maven => unignore project.

Luego después de un

mvn clean install -T 6 -DskipTests

En la consola, IntelliJ estaba feliz de nuevo. No tengo idea de cómo se ignoraron los proyectos ...

Ronald Teune
fuente
1

mvn idea:ideatrabajó para mi. Lo encontré aquí . Pasé más de una hora, espero que ayude a alguien

nilesh
fuente
1

Elimine el archivo: iml que se encuentra en java y las carpetas de prueba dentro del proyecto e invalide y reinicie.

Preguntará si puedo eliminar los proyectos. Poner sí. El error se apagará.

Harriesh Gomahan
fuente
1

Lo que funcionó para mí fue "Marcar como raíz de origen del directorio" el directorio en el que estaba la clase marcada en rojo, después de que desapareció la marca roja. Parece que por alguna razón no estaba marcado.

Ángel oscuro
fuente
1

Para proyectos de Gradle:

  1. Salga de IntelliJ IDEA
  2. Eliminar el <problematic-project-root>/.ideadirectorio
  3. Eliminar el <problematic-project-root>/.gradledirectorio
  4. Eliminar todos los .imlarchivos en<problematic-project-root>
    • símbolo del sistema de Windows :DEL /S /Q *.iml
    • linux: find . | grep -e .iml$ | xargs rm
  5. Vuelva a importar el proyecto en IntelliJ IDEA con Gradle
Eric
fuente
0

si es un proyecto de Maven, simplemente vaya a Configuración -> Herramientas de construcción -> Maven -> Importación. marque la casilla "importar proyecto maven automáticamente". Resolverá el problema.

Johnny Martin
fuente
0

Invalidate Caches funcionó para mí, pero después de ejecutar la aplicación tuvo el mismo error.

Entonces intenté ( Intellij ):

1 - Barra de menú - Refactor | Construir | Correr | Herramientas: haga clic en Construir y luego en Proyecto de reconstrucción

2 - MVN limpio

3 - Haga clic derecho en proyecto> Maven> Generar fuentes y actualizar carpeta

Espero que esto funcione para usted.

Gracias

Djalas
fuente
0

O tal vez el archivo que importa es demasiado grande. Este es mi caso, cuando cambio la propiedad Intellij: iead.max.intellisen.filesize (la ruta es $ {idea dir} /bin/idea.properties) a un valor mayor, como 25000, y reinicie el IDE, el problema desapareció. Espero que esto ayude.

Chaojun Zhong
fuente