Erstellen mit @ Slf4j und Intellij von Lombok: Symbolprotokoll kann nicht gefunden werden


112

Ich habe ein Maven-Projekt, das ohne Probleme über die Befehlszeile erstellt wird. Wenn ich es jedoch mit IntelliJ erstelle, wird folgende Fehlermeldung angezeigt:

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

In der Java-Datei ist kein Protokoll definiert oder importiert, aber es gibt ein

@Slf4j
final public class FileName {

Anweisung vor dem Klassenkörper, der die Protokollklasse definieren soll.

Im Projektstrukturfenster werden Klassen für:

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

sind unter Bibliotheken aufgeführt und gelten als heruntergeladen und verfügbar.

Irgendeine Idee, warum dies mit maven über die Befehlszeile, aber nicht über IntelliJ erstellt wird und wie das Problem behoben werden kann?


5
Bei demselben Problem half die Neuinstallation des Lombok-Plugins.
Alex Shumilov

Antworten:


169

Neben mit installiert Lombok Plugin , stellen Sie sicher auch , dass die „ Enable annotation processing“ Checkbox unter aktiviert ist:

Preferences > Compiler > Annotation Processors

Hinweis: Ab IntelliJ 2017 wurde das Enable Annotation ProcessingKontrollkästchen " " verschoben zu:

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

1
Ich habe die Anmerkungsverarbeitung nicht aktiviert und funktioniert: | Ich habe das Lombok-Plugin installiert.
Ben George

Ich habe das Plugin installiert und es hat funktioniert, ohne diese Einstellung zu ändern. Ich habe mich jedoch entschlossen, es aus gutem Grund zu ändern.
Sheldonkreger

6
Unter Verwendung der IntelliJ 2017.2- und Lombok-Plugins 0.14.16 war die Einstellung "Anmerkungsverarbeitung aktivieren" erforderlich. Das Kontrollkästchen befindet sich unter "Einstellungen" -> "Erstellen", "Ausführen", "Bereitstellen" -> "Compiler" -> "Anmerkungsprozessoren".
Niemi

1
IntelliJ 2018.2, Lombok-Plugin installiert 1.14. Ich musste die Annotationsverarbeitung in IntelliJ noch aktivieren. Datei-> Einstellungen-> Erstellen, Ausführen, Bereitstellen-> Compiler-> Anmerkungsprozessoren. IntelliJ gewinnt bei mir nicht wirklich Punkte.
Demaniak

32

Vermutlich ist das die Lombok @ Slf4j- Annotation, die Sie verwenden. Sie müssen das Lombok-Plugin in IntelliJ installieren, wenn IntelliJ Lombok-Anmerkungen erkennen soll. Was erwarten Sie sonst, wenn Sie versuchen, ein nicht vorhandenes Feld zu verwenden?


1
Ich habe das Lombok-Plugin installiert. In Bezug auf die Konfigurationsoptionen scheint es nicht viel zu geben. Vielleicht ist es ein Fehler im Plugin?
user1991839

1
Ich habe es erfolgreich mit IDEA 11 und 12 verwendet. Gelegentlich scheint etwas Lombok zu "vergessen", und ich bekomme ein paar rote Linien im Quellcode, aber es baut sich immer noch für mich auf. Es kommt und geht, also ist das Plugin definitiv nicht fehlerfrei.
Ryan Stewart

Wissen Sie, ob es eine Problemumgehung gibt, um dies zu überwinden? Möchten Sie IntelliJ möglicherweise über die Lombok-Bibliotheken informieren, ohne das Plugin zu durchlaufen? Ich versuche, IntelliJ zum Debuggen von Tests zu verwenden, und dies macht es mir schwer, es dafür zu verwenden
user1991839

Entschuldigung, kann dir da nicht helfen. Ich habe Lombok noch nicht sehr oft benutzt. Ich habe es gerade an einigen Stellen ausprobiert. Ich würde die Projektseite des Plugins überprüfen , aber ich habe das Gefühl, dass es noch keine sehr große Community gibt.
Ryan Stewart

23

Aktivieren Sie in Intellij Version 2016, 2017 Einstellungen aktivieren -> Compiler -> Anmerkungsprozessoren funktioniert bei mir nicht!

Das folgende zusätzliche Kontrollkästchen hilft: Geben Sie hier die Bildbeschreibung ein


1
Ich habe das Plugin hinzugefügt und Annotation Processors aktiviert, immer noch kein Glück. Können Sie angeben, wie Sie auf das obige Kontrollkästchen zugreifen sollen?
Philip John

@PhilipJohn: Geben Sie im Suchfeld "Einstellungen" "Lombok" ein?
Tim Long

Eigentlich müssen wir auch die Abhängigkeit "org.slf4j" hinzufügen
Vasyl Sarzhynskyi


10

Ich mag ein totes Thema entwirren, aber eine einfache Lösung besteht darin, Ihre Abhängigkeiten (zum Beispiel Mavens Pom) zu überprüfen, wenn Sie Logback-Core und Logback-Classic einschließen .

Slf4j ist nur die Schnittstelle, Sie benötigen die konkrete Implementierung dahinter, um zu funktionieren.

Ich wurde zweimal mit IDEA ausgetrickst , jetzt kann ich loslegen: D.


7

Hat für mich gearbeitet !!! Es schlug auch bei CircleCI und Jenkins fehl.

Wenn Sie ein Gradle-Benutzer sind, fügen Sie Folgendes zu Ihren Abhängigkeiten hinzu:

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

Die letzten 3 Elemente musste ich hinzufügen, wenn ich Gradle verwendete. Für ein vorheriges Projekt hatte ich mich bereits um das Lombok-Plugin und das Kontrollkästchen für den Anmerkungsprozessor für ein vorheriges Projekt gekümmert, für das wir Maven verwendet haben. Ich habe diesen Fehler festgestellt, nachdem ich mit IntelliJ ein Spring Boot-Projekt mit ausgewähltem Lombok erstellt habe. Es enthielt die Zeilen compileOnly und annotationProcessor, jedoch nicht die Zeilen test *.
Xenson

4

In IDEA 13 scheint dies kein Problem mehr zu sein. Sie müssen lediglich das Lombok-Plugin installiert haben.


4

Ich habe gerade die neueste Idee Version 2108.1 installiert und dieses Problem gefunden, nachdem ich das Lombok-Plugin installiert und die Idee neu gestartet habe, um es zu beheben.


4

Wenn Sie maven verwenden, versuchen Sie, den Lombok-Pfad zur maven-compiler-pluginListe der Anmerkungsprozessoren hinzuzufügen, wie unten gezeigt.

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

Ändern Sie die Version gemäß Ihrer Version von Lombok. Stellen Sie ansonsten sicher, dass Sie Folgendes getan haben

  • installierte das Lombok Plugin für Intellij.
  • Aktiviert die Annotationsverarbeitung für Ihr Projekt unter File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor. Für mich beide Obtain processors from project classpathund Processor patharbeitet. Sie sind sich also nicht sicher, was für Sie funktionieren wird, aber versuchen Sie, was auch immer funktioniert.

Und anstatt stundenlang im Dunkeln zu schießen. Es kann hilfreich sein, ein wenig zu lesen, wie Anmerkungsprozessoren funktionieren und vom Compiler verwendet werden. Lesen Sie also weiter unten.

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


Dies ist die einzige Lösung, die für mich funktioniert hat!
Cheemcheem

2

Das hat bei mir funktioniert: File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

Aktivieren Sie "Anmerkungsverarbeitung aktivieren". Apply

Schließen


2

Ich habe fast alle genannten Antworten ausprobiert, aber nichts hat bei mir funktioniert. Mein Gradle Build schlug jedes Mal fehl. Habe gerade diese Lösung gefunden:

Fügen Sie annotationProcessor 'org.projectlombok:lombok' in Ihrem build.gradle hinzu.

Das hat bei mir funktioniert.


2

Das Entfernen der @ Slf4J-Annotation aus der Klasse und das erneute Hinzufügen hat für mich funktioniert.


2

1 Meine gradle lombok Abhängigkeiten:

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

2 Nachdem Sie "Anmerkungen ..." in IDEA (Einstellungen) aktiviert haben und berücksichtigt haben, dass Sie das Lombok-Plugin installiert haben, wurde das gleiche Problem behoben


1

Ich habe dieses Problem mit einer älteren Version von Lombok beim Kompilieren unter JDK8 gesehen. Durch Zurücksetzen des Projekts auf JDK7 wurde das Problem behoben.


Das Aktualisieren der Lombok-Abhängigkeit im Pom funktioniert auch :)
Christophe Moine

1

Dies wird nicht das Problem von OP gewesen sein, aber für alle anderen, die alles ohne Erfolg versuchen :

Ich hatte ähnliche Symptome. Wann immer ich nach a baute mvn clean, fand es nicht logoder getXYZ()oder builder()oder oder irgendetwas.

[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

Nachdem ich alle Antworten zu QueryDSL / JPA / Hibernate / Lombok / IntelliJ / Maven-Problemen ohne Erfolg gelesen hatte, stellte ich fest, dass der Schuldige ein einzelner statischer Import einer @GetterMethode war, die in einem statischen Feld mit Anmerkungen versehen war .

Spring 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

Es ist kein IntelliJ-Problem. Wenn Sie es unter der Konsole versuchen, führen Sie mvn install aus , bricht auch ab. Alle erforderlichen Anmerkungen von lombok.extern fügen Abhängigkeiten hinzu. Dieses Paket gruppiert die nächsten Anmerkungen:

  • CommonsLog
  • Flogger
  • Log
  • JBossLog
  • Log4
  • Log4j2
  • Slf4j
  • XSlf4j

Für Slf4j ist es beispielsweise erforderlich, diese Abhängigkeit zu Ihrer pom.xml hinzuzufügen

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

0

Nachdem Sie Annotation-Prozessoren aktiviert und das Lombok-Plugin installiert hatten, funktionierte es immer noch nicht. Wir haben dies umgangen, indem wir die Ideenoption "IDE-Build an Gradle delegieren" aktiviert haben.


0

Für mich war es wichtig, das Kontrollkästchen "Plugin-Registrierung verwenden" in den Maven-Einstellungen zu aktivieren.

Der Pfad lautet: Datei -> Einstellungen -> Erstellen, Ausführen, Bereitstellen -> Erstellen von Tools -> Maven


0

Löschen Sie die IDE-Ordner- und IML-Dateien in jedem Modul und erstellen Sie die Lösung neu.


0

Ich hatte das Lombok-Plugin, Anmerkungen aktiviert, es wurde über die Befehlszeile kompiliert - alles und mein Projekt wurde immer noch nicht als Maven angezeigt (alle Maven-Abhängigkeiten waren in den Quelldateien rot). Dann habe ich zweimal auf UMSCHALT geklickt und nach 'maven' gesucht. Unter den Ergebnissen befand sich 'Alle Maven-Projekte neu laden'. Nach dem Ausführen erschien die Registerkarte Maven und ich konnte kompilieren. Alle roten Unterstreichungen im Quellcode verschwanden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.