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




maven intellij-idea (20)

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

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

Luego agregué la biblioteca jmime de hunnysoft a mi repositorio local de maven usando el archivo 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 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 del registrador en el archivo maven pom muy bien. Sin embargo, para todas las importaciones de hunnysoft, informa: "No se puede resolver el símbolo 'ByteString / Field / FieldBody'", BUT 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 () también como un área problemática).

Así que en algún lugar, de alguna manera, IntelliJ está ignorando 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.

Oh, 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 interrumpe.

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

Como experimento final, creé un nuevo proyecto de aplicación J2SE estándar (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 (a JarAnalyzer no se le ocurre nada, pero no estoy seguro de que lo haría si faltara un contenedor de dependencia).

Entonces, ¿alguien tiene alguna IDEA?


  1. Configuración abierta"
  2. Búsqueda de "Maven"
  3. Haga clic en "Archivos ignorados" debajo de "Maven"
  4. Desmarque los archivos pom.xml contiene 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"

¿Se ha publicado un arreglo? Aparece un problema originalmente afectado v11 / 12 debido a una "revisión del compilador" en 2013. Con 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ó como fijo pero sin verificar (en v12.0.3). Ninguna de las siguientes soluciones provisionales ayudó a resolver este problema "No se puede resolver el símbolo" con la versión 13.1.1 en Windows

a. Elimine la carpeta .IdealIC13 (Entonces, Archivo \ Invalidar cachés / Reiniciar)

segundo. Desde la ventana de Proyectos Maven ,

b.1 mvn -U idea: idea -〉 Ejecutar este objetivo de Maven supone recargar las dependencias. Esto funciona anterior, pero desde el último FRI, la ejecución de este objetivo de 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 arreglar ejecutando este comando en primer lugar) mvn -version - muestra la versión de maven referencia 3.2.5 y que está funcionando

b.2 Simplemente haga clic derecho en el proyecto, y Reimportar

b.3 Archivo \ Invalidar cachés / Reiniciar

do. 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 al final (en lugar de predeterminado)

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

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

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

IntelliJ v14 NOV 2014

IntelliJ v13 DIC 2013

Asumiría que v12 arreglado (aunque sin verificar ) se incorporaría en versiones posteriores. ¿Alguien que tenga problemas similares con la versión de IntelliJ? Por favor comparte tu experiencia. IntelliJ maven soporte parece roto.


Acabo de tener este problema y simplemente no desaparecería. Finalmente borré el directorio de configuración de IntelliJ en ~ y reconstruí mi proyecto de IntelliJ desde cero. (Esto solo tomó 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 conjetura es que el problema inicial fue causado por algo como javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html (NB: a partir de 2018, ese enlace está muerto , pero archive.org tiene una copia de la página de alrededor de cuando se escribió esta respuesta por primera vez -ed.) o un problema de espacio en disco / memoria que causa el bloqueo de Java. IntelliJ parecía simplemente corromperse.


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

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


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

Preguntará si puedo eliminar los proyectos. Poner si. El error se apaga.


En mi caso, este problema apareció después de verificar una gran reestructuración de los archivos en mi proyecto de Maven. En el momento de la salida tenía algunos de mis propios cambios sin marcar todavía activos. Los cambios no se debieron a ninguno de los archivos que se estaban reestructurando, por lo que pude ver.

Invalidar el caché y reiniciar no funcionó para mí. Lo que funcionó fue:

  • revirtiendo los cambios que había hecho antes de la gran reestructuración de pago
  • reimportando todos los modulos de maven

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

Cuando lo hago Build | Make Project Build | Make Project antes de File | Invalidate Caches File | Invalidate Caches , todo funciona bien.


En primer lugar deberías probar File | Invalidate Caches File | Invalidate Caches y si no ayuda, elimine el directorio del sistema IDEA . A continuación, vuelva a importar el proyecto Maven y ver si ayuda.

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


Estructura de mi proyecto:

src -> main -> scala -> mypackages

Lo que funcionó:

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


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

Así que lo intenté ( Intellij ):

1 - Barra de menú - Refactor | Construir | Correr | Herramientas: haga clic en Crear y luego en Reconstruir proyecto

2 - MVN limpio

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

Espero que esto funcione para usted.

Gracias


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

  1. Ir a File -> Project Strucutre -> Modules
  2. En Haga clic en los módulos que tienen subrayado rojo.
  3. Ir a la pestaña "Dependencias"
  4. Asegúrese de que las dependencias que son rojas realmente existan en la lista de dependencias. Si no, renómbrelos para que coincidan con los nombres de dependencia existentes

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


Ninguna de las otras respuestas funcionó para mí. Mis importaciones no se estaban resolviendo porque IntelliJ señaló un archivo .m2 incorrecto.

Versión IntelliJ: IntelliJ Idea 2018.1.5

Mi ubicación para el directorio .m2 fue apuntada 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, Despliegue-> Herramientas de compilación-> Maven-> Repositorios

y haga clic en el botón Actualizar.


Ninguna de las soluciones anteriores lo resolvió por mí. Tuve el mismo problema donde el código se compiló bien, pero IntelliJ demostró 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 paquete com.foo.bar , luego volver a crearlo y mover todo hacia atrás.


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.


Para los usuarios de Intellij Idea, estos comandos incluso antes de importar un proyecto pueden ayudar:

./gradlew construir . / idea de gradlew


Por otra alternativa.

También tuve este problema cuando usé JDK7_07. Intenté todas las respuestas aquí (excepto la eliminación del Directorio del Sistema IDEA). Pero, todavía tengo el problema. Así que lo que hice es:

Instale el JDK más reciente (era JDK7_45), configure el JDK de Intellij al nuevo y funcionará.


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


Si el proyecto maven, simplemente vaya a la configuración -> herramientas de compilación -> maven -> importando. Marque la casilla de verificación "importar el proyecto de Maven automáticamente". resolverá el problema


Un paso adicional, cuando hice Archivo -> Invalidar cachés y reinicié el IDE, abra un proyecto. Apareció una caja de tostadas en la parte superior derecha que me pregunta si debo habilitar la importación automática y eso resolvió el problema.


a veces, cuando creas un paquete como com.mydomain.something, la estructura de directorios no se crea y te queda una única carpeta llamada "com.mydomain.something" en este caso, debes crear una estructura de directorios, como

com
|_mydomain
  |_something 




intellij-inspections