Costruire con Lombok's @ Slf4j e Intellij: impossibile trovare il log dei simboli


113

Ho un progetto esperto che si costruisce senza problemi dalla riga di comando. Tuttavia, quando lo compilo con IntelliJ, ottengo l'errore:

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

Non è presente alcun registro definito o importato nel file java, ma è presente un file

@Slf4j
final public class FileName {

dichiarazione prima del corpo della classe che dovrebbe definire la classe di log.

Nella finestra della struttura del progetto, classi per:

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

sono elencati sotto le librerie e sono indicati come scaricati e disponibili.

Qualche idea sul perché questo dovrebbe essere costruito con Maven tramite la riga di comando, ma non tramite IntelliJ e come risolvere il problema?


5
Avendo lo stesso problema, reinstallare il plugin Lombok ha aiutato.
Alex Shumilov

Risposte:


170

Oltre ad avere installato il plugin Lombok , assicurati anche che la Enable annotation processingcasella di controllo " " sia spuntata sotto:

Preferences > Compiler > Annotation Processors

Nota: a partire da IntelliJ 2017, la Enable Annotation Processingcasella di controllo " " è stata spostata in:

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

1
Non ho l'elaborazione delle annotazioni abilitata e funziona: | Ho installato il plugin lombok.
Ben George

Ho installato il plug-in e ha funzionato senza modificare questa impostazione. Tuttavia, ho deciso di cambiarlo per buona misura.
sheldonkreger

6
Utilizzando IntelliJ 2017.2 e i plug-in Lombok 0.14.16, era necessario impostare "Abilita elaborazione annotazioni" e la casella di controllo si trova in Preferenze -> Build, Execution, Deployment -> Compiler -> Annotation Processors.
Niemi

1
IntelliJ 2018.2, plugin lombok installato 1.14. Dovevo ancora abilitare l'elaborazione delle annotazioni in IntelliJ. File-> Impostazioni-> Build, Execution, Deployment-> Compiler-> Annotation Processors. IntelliJ non sta davvero guadagnando punti con me.
demaniak

32

Presumibilmente, questa è l' annotazione Lombok @ Slf4j che stai utilizzando. Dovrai installare il plug-in Lombok in IntelliJ se desideri che IntelliJ riconosca le annotazioni Lombok. Altrimenti, cosa ti aspetti se provi a utilizzare un campo che non esiste?


1
Ho installato il plugin Lombok. Non sembra esserci molto in termini di opzioni di configurazione. Forse è un bug nel plugin?
user1991839

1
L'ho usato con successo con IDEA 11 e 12. Occasionalmente, qualcosa sembra "dimenticare" Lombok, e ottengo un mucchio di linee rosse nel codice sorgente, ma continua a costruire per me. Va e viene, tuttavia, quindi il plug-in non è sicuramente privo di bug.
Ryan Stewart

Sai se esiste una soluzione alternativa per superare questo problema? Come eventualmente informare IntelliJ delle librerie Lombok senza passare attraverso il plugin? Sto cercando di utilizzare IntelliJ per i test di debug e questo mi rende difficile utilizzarlo per quello
user1991839

Mi spiace, non posso aiutarti. Non ho ancora usato molto Lombok. L'ho appena provato in alcuni posti. Vorrei controllare la pagina del progetto del plugin , ma ho la sensazione che non ci sia ancora una grande comunità intorno ad esso.
Ryan Stewart

24

In Intellij versione 2016, 2017, abilitare Preferenze -> Compilatore -> Processori di annotazioni non funziona per me!

La seguente casella di controllo aggiuntiva aiuta: inserisci qui la descrizione dell'immagine


1
Ho aggiunto il plug-in e abilitato i processori di annotazione, ancora senza fortuna. Potete fornire come accedere alla casella di controllo sopra?
Philip John,

@PhilipJohn: Nella casella di ricerca delle preferenze, digita "Lombok"?
Tim Long,

in realtà dobbiamo anche aggiungere la dipendenza "org.slf4j"
Vasyl Sarzhynskyi


10

Potrei rimuovere un argomento morto, ma una soluzione semplice è controllare le tue dipendenze (il pom di Maven per esempio) se includi logback-core e logback-classic .

Slf4j è solo l'interfaccia, hai bisogno dell'implementazione concreta dietro di essa per funzionare.

Sono stato ingannato due volte con IDEA che ha rovinato tutto, ora sono a posto: D


7

Ha funzionato per me !!! Stava fallendo anche su CircleCI e su Jenkins.

Se sei un utente Gradle, prova ad aggiungere quanto segue nelle tue dipendenze:

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

Gli ultimi 3 elementi sono ciò che dovevo aggiungere quando usavo Gradle. Per un progetto precedente mi ero già occupato del plugin Lombok e della casella di controllo del processore di annotazioni per un progetto precedente per il quale abbiamo utilizzato Maven. Ho riscontrato questo errore dopo aver utilizzato IntelliJ per creare un progetto Spring Boot con Lombok selezionato; includeva le righe compileOnly e annotationProcessor, ma non le righe test *.
Xenson

4

In IDEA 13 questo sembra non essere più un problema, devi solo avere installato il plugin Lombok.


4

Ho appena installato l'ultima versione idea 2108.1 e ho trovato questo problema, dopo aver installato il plug-in lombok e riavviato Idea risolverlo.


4

Se stai usando Maven, prova ad aggiungere il percorso Lombok maven-compiler-pluginall'elenco del processore di annotazioni come mostrato di seguito.

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

Cambia la versione secondo la tua versione di Lombok. Oltre a questo assicurati di aver fatto quanto segue

  • ha installato il plugin Lombok per Intellij.
  • Abilitata l'elaborazione delle annotazioni per il tuo progetto in File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor. Per me entrambi, Obtain processors from project classpathe Processor pathsta funzionando. Quindi non sei sicuro di cosa funzionerà per te, ma prova quello che funziona.

E invece di scattare per ore al buio. Leggere un po 'come funzionano i processori di annotazione e sono usati dal compilatore può aiutare. quindi leggi velocemente di seguito.

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


Questa è l'unica soluzione che ha funzionato per me!
cheemcheem

2

Questo ha funzionato per me: File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

Spunta su "Abilita elaborazione annotazioni". Apply

Vicino


2

Ho provato quasi tutte le risposte menzionate ma niente ha funzionato per me. La mia corporatura gradle falliva ogni volta. Ho appena trovato questa soluzione:

Inserisci annotationProcessor 'org.projectlombok:lombok' tuo file build.gradle.

Questo ha funzionato per me.


2

Rimuovere l'annotazione @ Slf4J dalla classe e poi aggiungerla di nuovo ha funzionato per me.


2

1 Le mie dipendenze gradle lombok:

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

2 Dopo aver abilitato "Annotazioni ..." in IDEA (Impostazioni), tenendo conto che hai installato il plugin Lombok, questo ha risolto il mio stesso problema


1

Ho riscontrato questo problema con una versione precedente di Lombok durante la compilazione con JDK8. L'impostazione del progetto su JDK7 ha risolto il problema.


Funziona anche l'aggiornamento della dipendenza lombok nel pom :)
Christophe Moine

1

Questo non sarà stato un problema di OP, ma per chiunque altro provi tutto senza successo:

Ho avuto sintomi simili. Ogni volta che ho costruito dopo un mvn clean, non trovava log, o getXYZ(), o builder(), o niente.

[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

Dopo aver letto tutte le risposte che sono riuscito a trovare sui problemi di QueryDSL / JPA / Hibernate / Lombok / IntelliJ / Maven senza alcun risultato, ho scoperto che il colpevole era una singola importazione statica di un @Gettermetodo annotato su un campo statico .

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

Non è un problema di IntelliJ. Se provi da console, esegui mvn install , si interrompe anche. Tutte le annotazioni da lombok.extern dovevano aggiungere dipendenze. Questo pacchetto raggruppa le seguenti annotazioni:

  • CommonsLog
  • flogger
  • Login
  • JBossLog
  • Log4
  • Log4j2
  • SLF4J
  • XSlf4j

Ad esempio, per Slf4j è necessario aggiungere questa dipendenza al tuo pom.xml

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

0

Dopo aver abilitato i processori di annotazione e installato il plug-in lombok, continuava a non funzionare. Abbiamo risolto il problema selezionando l'opzione Idea "Delega IDE build to gradle"


0

Ciò che ha risolto le cose per me è stato selezionare la casella di controllo "Usa registro plugin" nelle impostazioni di Maven.

Il percorso è: File -> Preferenze -> Build, Execution, Deployment -> Build Tools -> Maven


0

Elimina la cartella .idea ei file .iml in ogni modulo e ricostruisci la soluzione.


0

Avevo il plug-in Lombok, le annotazioni abilitate, stava compilando dalla riga di comando - tutto e ancora non vedeva il mio progetto come Maven (tutte le dipendenze Maven erano rosse nei file sorgente). Quindi ho cliccato due volte MAIUSC e ho cercato "maven" e tra i risultati c'era "Ricarica tutti i progetti Maven". Dopo averlo eseguito, è apparsa la scheda Maven e sono stato in grado di compilare, e tutte le sottolineature rosse nel codice sorgente sono scomparse.


0

Una cosa semplice, ma ho capito è: mi mancava l'aggiunta @Logalla classe.

@Log
public class YourClassName {


}

Può aiutare qualcuno.


0

Ho lo stesso problema; Uso gradle e IDEA;

Si scopre che è causato dalla versione sbagliata di gradle.

In gradle \ wrapper \ gradle-wrapper.properties, è:

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

Tuttavia, ho specificato che la versione in IDEA fosse

D:\Library\gradle-5.2.1

Dopo aver abbassato la versione gradle a 4.10.x, il problema è scomparso.


0

Prova a creare il lombok.configfile nella directory di base del progetto e fornisci lombok.log.fieldNamevalore.

Esempio: lombok.log.fieldName = LOG

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.