Construyendo con @ Slf4j e Intellij de Lombok: No se puede encontrar el registro de símbolos


113

Tengo un proyecto maven que se construye sin problemas desde la línea de comandos. Sin embargo, cuando lo construyo con IntelliJ, aparece el error:

java: FileName.java:89: cannot find symbol
symbol  : variable log

No hay un registro definido o importado en el archivo java, pero hay un

@Slf4j
final public class FileName {

declaración antes del cuerpo de la clase que debería definir la clase de registro.

En la ventana de estructura del proyecto, clases para:

Maven: org.slf4j:jcl-over-slf4j:1.6.1
Maven: org.slf4j:slf4j-api:1.6.6
Maven: org.slf4j:slf4j-log4j12:1.6.6
Maven: org.slf4j:slf4j-simple:1.6.6

se enumeran en bibliotecas y se indican como descargados y disponibles.

¿Alguna idea de por qué esto se compilaría con maven a través de la línea de comando, pero no a través de IntelliJ y cómo resolver el problema?


5
Al tener el mismo problema, reinstalar Lombok Plugin ayudó.
Alex Shumilov

Respuestas:


170

Además de tener instalado el complemento Lombok , también asegúrese de que la Enable annotation processingcasilla de verificación " " esté marcada debajo de:

Preferences > Compiler > Annotation Processors

Nota: a partir de IntelliJ 2017, la Enable Annotation Processingcasilla de verificación " " se ha movido a:

Settings > Build, Execution, Deployment > Compiler > Annotation Processors

1
No tengo habilitado el procesamiento de anotaciones y funciona: | Tengo el plugin lombok instalado.
Ben George

Instalé el complemento y funcionó sin cambiar esta configuración. Sin embargo, decidí cambiarlo por si acaso.
sheldonkreger

6
Con los complementos IntelliJ 2017.2 y Lombok 0.14.16, era necesario configurar "Habilitar el procesamiento de anotaciones" y la casilla de verificación se encuentra en Preferencias -> Compilación, ejecución, implementación -> Compilador -> Procesadores de anotaciones.
Niemi

1
IntelliJ 2018.2, complemento de lombok instalado 1.14. Todavía tenía que habilitar el procesamiento de anotaciones en IntelliJ. Archivo-> Configuración-> Compilación, ejecución, implementación-> Compilador-> Procesadores de anotaciones. IntelliJ realmente no está ganando puntos conmigo.
demaniak

32

Presumiblemente, esa es la anotación de Lombok @ Slf4j que estás usando. Deberá instalar el complemento Lombok en IntelliJ si desea que IntelliJ reconozca las anotaciones de Lombok. De lo contrario, ¿qué espera si intenta utilizar un campo que no existe?


1
Tengo instalado el complemento Lombok. No parece haber mucho en términos de opciones de configuración. ¿Quizás es un error en el complemento?
user1991839

1
Lo he usado con éxito con IDEA 11 y 12. Ocasionalmente, algo parece "olvidarse" de Lombok, y obtengo un montón de líneas rojas en el código fuente, pero aún así se construye para mí. Sin embargo, aparece y desaparece, por lo que el complemento definitivamente no está libre de errores.
Ryan Stewart

¿Sabes si hay una solución para superar esto? ¿Como posiblemente informar a IntelliJ de las bibliotecas de Lombok sin pasar por el complemento? Estoy tratando de usar IntelliJ para depurar pruebas y esto me dificulta usarlo para eso
user1991839

Lo siento, no puedo ayudarte con eso. Todavía no he usado mucho Lombok. Lo he probado en algunos lugares. Revisaría la página del proyecto del complemento , pero tengo la sensación de que todavía no hay una comunidad muy grande a su alrededor.
Ryan Stewart

24

En Intellij versión 2016, 2017, habilite Preferencias -> Compilador -> ¡Los procesadores de anotaciones no funcionan para mí!

La siguiente casilla de verificación adicional ayuda: ingrese la descripción de la imagen aquí


1
Agregué el complemento y habilité Procesadores de anotaciones, pero todavía no tuve suerte. ¿Puede proporcionarnos cómo acceder a la casilla de verificación anterior?
Philip John

@PhilipJohn: En el cuadro de búsqueda de Preferencias, escriba "Lombok"?
Tim Long

en realidad, también necesitamos agregar la dependencia "org.slf4j"
Vasyl Sarzhynskyi


10

Podría estar desgranando un tema muerto, pero una solución simple es verificar sus dependencias (pom de Maven, por ejemplo) si está incluyendo logback-core y logback-classic .

Slf4j es solo la interfaz, necesita la implementación concreta detrás para que funcione.

Me engañaron dos veces con IDEA arruinándolo, ahora estoy listo para comenzar: D


7

¡¡¡Trabajó para mi!!! También estaba fallando en CircleCI y en Jenkins.

Si es un usuario de Gradle, intente agregar lo siguiente a sus dependencias:

dependencies {
    //Other Dependencies >>

    //LOMBOK Dependencies
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'
    testCompile 'org.projectlombok:lombok'
    testImplementation 'org.projectlombok:lombok'
}

Los últimos 3 elementos son los que necesitaba agregar al usar Gradle. Para un proyecto anterior, ya me había ocupado del complemento de Lombok y la casilla de verificación del procesador de anotaciones para un proyecto anterior para el que usamos Maven. Encontré este error después de usar IntelliJ para crear un proyecto Spring Boot con Lombok seleccionado; incluía las líneas compileOnly y annotationProcessor, pero no las líneas de prueba *.
Xenson

4

En IDEA 13, esto parece no ser un problema, solo tiene que tener instalado el complemento Lombok.


4

Acabo de instalar la última versión de idea 2108.1 y encontré este problema, después de instalar el complemento lombok y reiniciar la idea, resuélvelo.


4

Si está utilizando maven, intente agregar la ruta de Lombok a la maven-compiler-pluginlista de procesadores de anotaciones como se muestra a continuación.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>1.3.0.Final</version>
                    </path>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>1.18.10</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>

Cambie la versión según su versión de Lombok. Aparte de eso, asegúrese de haber hecho lo siguiente

  • instaló el complemento Lombok para Intellij.
  • Habilitado el procesamiento de anotaciones para su proyecto en File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor. Para mí ambos, Obtain processors from project classpathy Processor pathestá funcionando. Así que no estoy seguro de qué funcionará para usted, pero intente lo que funcione.

Y en lugar de disparar en la oscuridad durante horas. Leer un poco cómo funcionan los procesadores de anotaciones y cómo los usa el compilador puede ayudar. así que lea rápidamente a continuación.

http://hannesdorfmann.com/annotation-processing/annotationprocessing101


¡Esta es la única solución que funcionó para mí!
Cheemcheem

2

Esto funcionó para mí: File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

Marque 'habilitar procesamiento de anotaciones'. Apply

Cerca


2

Probé casi todas las respuestas mencionadas, pero nada funcionó para mí. Mi compilación de Gradle fallaba todo el tiempo. Acabo de encontrar esta solución:

Agregue annotationProcessor 'org.projectlombok:lombok' su build.gradle.

Esto funcionó para mí.


2

Eliminar la anotación @ Slf4J de la clase y luego volver a agregarla funcionó para mí.


2

1 Mis dependencias de gradle lombok:

implementation 'org.projectlombok:lombok:1.18.10'
annotationProcessor 'org.projectlombok:lombok:1.18.10'

2 Después de habilitar "Anotaciones ..." en IDEA (Configuración), teniendo en cuenta que instaló el complemento Lombok, se resolvió el mismo problema


1

Veía este problema con una versión anterior de Lombok al compilar bajo JDK8. Volver a configurar el proyecto en JDK7 hizo que el problema desapareciera.


Actualizar la dependencia de lombok en el pom también funciona :)
Christophe Moine

1

Este no habrá sido un problema de OP, pero para cualquier otra persona que lo intente todo sin éxito:

Tuve síntomas similares. Siempre que construía después de a mvn clean, no encontraba log, ni getXYZ(), ni builder(), ni nada.

[ERROR]   symbol:   variable log
[ERROR]   location: class com.example.MyClass
[ERROR] /Path/To/Some/Java/src/main/com/example/MyClass.java:[30,38] cannot find symbol
[ERROR]   symbol:   method builder()
[ERROR]   location: class com.example.MyClass

Después de leer todas las respuestas que pude encontrar sobre problemas de QueryDSL / JPA / Hibernate / Lombok / IntelliJ / Maven en vano, descubrí que el culpable era una única importación estática de un @Gettermétodo que estaba anotado en un campo estático .

Primavera 1.15.14.RELEASE, Intellij 2019.1.1

@SpringBootApplication
public class BarApplication implements ApplicationContextAware {
  @Getter
  private static ApplicationContext applicationContext;

  // ... start Spring application, and grab hold of ApplicationContext as it comes past
}
import ...
import static BarApplication.getApplicationContext;

@Slf4j
public class IMakeItAllFail {
   public IMakeItAllFail() {
      log.info("{}", getApplicationContext());
   }
}
@Slf4j
public class Foo {
  Foo() {
    log.info("I fail to compile but I have nothing to do with the other classes!");
  }
}

1

No es un problema de IntelliJ. Si lo intenta en la consola, ejecute mvn install , también se rompe. Todas las anotaciones de lombok.extern necesitaban agregar dependencias. Este paquete agrupa las siguientes anotaciones:

  • CommonsLog
  • Látigo
  • Iniciar sesión
  • JBossLog
  • Log4
  • Log4j2
  • Slf4j
  • XSlf4j

Por ejemplo, para Slf4j es necesario agregar esta dependencia a su pom.xml

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>

0

Después de habilitar los procesadores de anotaciones e instalar el complemento lombok, aún no funcionaba. Lo solucionamos marcando la opción Idea "Delegar compilación de IDE en gradle"


0

Lo que solucionó las cosas para mí fue marcar la casilla de verificación "Usar registro de complementos" en la configuración de Maven.

La ruta es: Archivo -> Preferencias -> Compilación, ejecución, implementación -> Herramientas de compilación -> Maven


0

Elimine la carpeta .idea y los archivos .iml en cada módulo y reconstruya la solución.


0

Tenía el complemento de Lombok, las anotaciones habilitadas, se estaba compilando desde la línea de comandos, todo y todavía no veía mi proyecto como maven (todas las dependencias de maven estaban en rojo en los archivos fuente). Luego hice clic en MAYÚS dos veces y busqué 'maven' y entre los resultados estaba 'Recargar todos los proyectos de Maven'. Después de ejecutarlo, apareció la pestaña Maven y pude compilar, y todo el subrayado rojo en el código fuente desapareció.


0

Una cosa simple, pero lo descubrí es: me perdí agregar @Loga la clase.

@Log
public class YourClassName {


}

Puede ayudar a alguien.


0

Tengo el mismo problema; Yo uso gradle e IDEA;

Resulta que es causado por la versión incorrecta de gradle.

En gradle \ wrapper \ gradle-wrapper.properties, es:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-bin.zip

Sin embargo, especifiqué que la versión en IDEA sería

D:\Library\gradle-5.2.1

Después de bajar la versión de Gradle a 4.10.x, el problema desapareció.


0

Intente crear un lombok.configarchivo en el directorio base del proyecto y proporcione lombok.log.fieldNamevalor.

Ejemplo: lombok.log.fieldName = LOG

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.