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 (30)
- Configuración abierta"
- Búsqueda de "Maven"
- Haga clic en "Archivos ignorados" debajo de "Maven"
- Desmarque los archivos pom.xml contiene las dependencias que faltan
- Haga clic en Aceptar"
- Haga clic en Archivo -> Invalidar cachés / Reiniciar ...
- Haga clic en "Invalidar y reiniciar"
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?
¿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.
A veces, simplemente abro la estructura del proyecto, hago clic en el proyecto y luego elijo una versión del SDK .
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.
El siguiente truco resolvió este problema para mí:
- Haga clic derecho en el editor de código
- Muevete sobre Maven y expande
- Haga clic en Reimport
La versión de mi idea es 12.0.4
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, estoy tratando de abrir un proyecto de arranque de spring desde IntellijIdea que tuvo el mismo problema, al no poder importar todos los archivos relacionados con spring.
Entonces hice
Archivo -> Cerrar proyecto -> Importar proyecto -> Importar desde modelo externo -> Elegir Gradle -> Siguiente -> Seleccionar 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. Se puede usar para alguien como yo.
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 .
Esto se mencionó anteriormente, pero esto solo soluciona esto para mí. Hago todas mis construcciones en una terminal marítima, fuera de IntelliJ. Por lo tanto, la memoria caché necesita tener los permisos adecuados establecidos para que la aplicación IntelliJ los lea.
Ejecutarlo desde la carpeta raíz del proyecto.
$ mvn -U idea:idea
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
Las soluciones sugeridas no funcionaron. Tuve que desactivar varios proyectos haciendo clic con el botón derecho en el proyecto pom => maven => unignore.
Entonces después de un
mvn clean install -T 6 -DskipTests
En la consola, IntelliJ volvió a ser feliz. No tengo idea de cómo los proyectos se ignoraron ...
Los nombres de módulos inconsistentes / duplicados en la estructura del proyecto me estaban causando este problema.
- Ir a
File -> Project Strucutre -> Modules
- En Haga clic en los módulos que tienen subrayado rojo.
- Ir a la pestaña "Dependencias"
- 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 funcionó para mí. Lo que hizo fue eliminar el archivo main.iml manualmente y de repente funcionó.
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.
Otra cosa para verificar: asegúrese de que las dependencias no estén duplicadas. En mi caso, descubrí que un módulo que mostraba este comportamiento estaba mal configurado de la siguiente manera: tenía una dependencia de otro módulo y tenía una dependencia de un tarro producido por ese otro módulo. Esto significaba para cada símbolo al que se hacía referencia en duplicado, y era ambiguo.
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á.
Reimportando el proyecto funcionó para mí. Haga clic derecho en Proyecto -> Maven -> Reimportar
cuando hice Archivo -> Invalidar cachés y reinicié el IDE, abra un proyecto. Mostró un diálogo en la parte superior derecha "Se detectaron cambios en 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.
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
Si su proyecto de Maven es un proyecto de múltiples módulos, verifique si intellij ignora algunos de los módulos.
- Haga clic en Ver -> Herramientas de Windows -> Proyectos de Maven, y verifique si se ignoran algunos módulos (los módulos ignorados están en gris, por ejemplo,
gs-multi-module
en la siguiente imagen).
- Haga clic derecho en el módulo ignorado y elija
Unignore Projects
.
Luego, espere a que intellij termine la indexación, después de lo cual funcionará.
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
Para los usuarios de Gradle:
Es posible que deba sincronizar su proyecto con su archivo build.gradle
.
Puede hacer clic con el botón derecho en su archivo de gradle en el panel Proyecto para hacer esto, pero eso no parece hacer nada por mí (sospecho que hay un error en mi versión). Sabrá si esto sucede porque no iniciará ninguna de las tareas 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 la invalidación de la memoria caché y el reinicio no lo hicieron.
Mi propia circunstancia: estaba usando un proyecto de Scala con Gradle y tuve que hacer esto.