web-dev-qa-db-fra.com

Construire avec @ Slf4j et Intellij de Lombok: impossible de trouver le journal des symboles

J'ai un projet maven qui se construit sans aucun problème depuis la ligne de commande. Cependant, lorsque je le construis avec IntelliJ, j'obtiens l'erreur:

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

Il n’existe pas de journal défini ou importé dans le fichier Java, mais il existe un

@Slf4j
final public class FileName {

déclaration devant le corps de la classe qui devrait définir la classe de journal.

Dans la fenêtre de la structure du projet, classes pour:

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

sont répertoriés dans les bibliothèques et sont indiqués comme ayant été téléchargés et disponibles.

Avez-vous une idée de la raison pour laquelle cela fonctionne avec maven via la ligne de commande, mais pas avec IntelliJ et comment résoudre le problème?

50
user1991839

En plus d'avoir le plugin Lombok installé (v0.5 pour IntelliJ 12), assurez-vous également que la case "Activer le traitement des annotations" est cochée sous: Préférences -> Compilateur -> Processeurs d'annotation 

93

Vraisemblablement, c'est le Lombok @ Slf4j annotation que vous utilisez. Vous aurez besoin d'installer le plugin Lombok dans IntelliJ si vous voulez qu'IntelliJ reconnaisse les annotations de Lombok. Sinon, qu'attendez-vous si vous essayez d'utiliser un champ qui n'existe pas?

17
Ryan Stewart

Dans Intellij version 2016, 2017, activez Préférences -> Compilateur -> Processeurs d'annotation ne fonctionne pas pour moi!

La case à cocher supplémentaire suivante aide:  enter image description here

15
Tim Long

Dans IDEA 13, cela ne semble plus être un problème, il suffit d’installer le plugin Lombok.

4
f120146

Cela a fonctionné pour moi: File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

Cochez la case 'activer le traitement des annotations' .Apply

Fermer

2

Je suis peut-être en train de graver un sujet mort, mais une solution simple consiste à vérifier vos dépendances (pom de Maven par exemple) si vous incluez logback-core et logback-classic .

Slf4j est juste l'interface, vous avez besoin de la mise en œuvre concrète derrière pour fonctionner.

J'ai été trompé deux fois avecIDÉEje me suis trompé, maintenant je suis prêt à partir: D

2
Ethenyl

Je voyais ce problème avec une ancienne version de Lombok lors de la compilation sous JDK8. Remettre le projet à JDK7 a résolu le problème.

1
John Chapman

Je viens d'installer la dernière version d'idée 2108.1 et j'ai trouvé ce problème après avoir installé le plugin Lombok et redémarré Idea.

1
mefor sy

Cela n’aura pas été un problème pour OP, mais pour tous ceux qui essaient tout sans succès:

J'ai eu des symptômes similaires. Chaque fois que je construis après un mvn clean, il ne trouve pas log, ou getXYZ(), ou builder(), ou quoi que ce soit.

[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

Après avoir lu toutes les réponses que j'ai pu trouver sur les problèmes QueryDSL/JPA/Hibernate/Lombok/IntelliJ/Maven sans succès, j'ai découvert que le coupable était une simple importation statique d'une méthode @Getter annotée sur un champ statique.

Printemps 1.15.14.RELEASE, mardi 29 mars 2011

@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!");
  }
}
0
Corwin Newall

Après avoir essayé toutes ces réponses en vain, un redémarrage dans Windows 10 fonctionne pour moi. Votez-moi au sommet pour exprimer votre colère envers Microsoft. (sans blague)

0
WesternGun

Après avoir activé les processeurs d'annotation et installé le plugin Lombok, cela ne fonctionnait toujours pas. Nous avons corrigé l'option Idea "Déléguer IDE build à modifier".

0
Kristjan Peil

Travaillé pour moi !!! Il a également échoué sur CircleCI et Jenkins.

Si vous êtes un utilisateur Gradle, essayez d'ajouter ce qui suit dans vos dépendances:

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

2019:

Obtenez un plugin et vous êtes triés ...

Fichier> Paramètres> Plug-ins

 enter image description here 

0
Witold Kaczurba

Ce qui a été réglé pour moi a été de cocher la case "Utiliser le registre de plugins" dans les paramètres Maven.

Le chemin est: Fichier -> Préférences -> Construire, Exécution, Déploiement -> Construire Outils -> Maven

0
Radu Ciobanu

J'ai essayé presque toutes les réponses mentionnées mais rien n'a fonctionné pour moi. Mon niveau de construction échouait à chaque fois. Je viens de trouver cette solution:

Ajoutez annotationProcessor 'org.projectlombok:lombok' dans votre build.gradle.

Cela a fonctionné pour moi.

0
Amrit Kr Lama