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

113

J'ai un projet maven qui se construit sans problème à partir de 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'y a pas de journal défini ou importé dans le fichier java, mais il y a un

@Slf4j
final public class FileName {

instruction avant le corps de la classe qui doit définir la classe du journal.

Dans la fenêtre de structure du projet, les 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 sous bibliothèques et sont indiqués comme ayant été téléchargés et disponibles.

Une idée de la raison pour laquelle cela serait construit avec maven via la ligne de commande, mais pas via IntelliJ et comment résoudre le problème?

user1991839
la source
5
Ayant le même problème, la réinstallation du plug-in Lombok a aidé.
Alex Shumilov

Réponses:

170

En plus d' avoir installé le plugin Lombok , assurez-vous également que la Enable annotation processingcase " " est cochée sous:

Preferences > Compiler > Annotation Processors

Remarque: à partir d'IntelliJ 2017, la Enable Annotation Processingcase à cocher " " a été déplacée vers:

Settings > Build, Execution, Deployment > Compiler > Annotation Processors
Alexandre Zagniotov
la source
1
Je n'ai pas activé le traitement des annotations et fonctionne: | J'ai installé le plugin lombok.
Ben George
J'ai installé le plugin et cela a fonctionné sans changer ce paramètre. Cependant, j'ai décidé de le changer pour faire bonne mesure.
sheldonkreger
6
En utilisant les plugins IntelliJ 2017.2 et Lombok 0.14.16, il était nécessaire de définir "Activer le traitement des annotations" et la case à cocher se trouve sous Préférences -> Construire, Exécution, Déploiement -> Compilateur -> Processeurs d'annotation.
Niemi le
1
IntelliJ 2018.2, plugin lombok installé 1.14. Je devais encore activer le traitement des annotations dans IntelliJ. Fichier-> Paramètres-> Construire, Exécution, Déploiement-> Compilateur-> Processeurs d'annotations. IntelliJ ne gagne pas vraiment de points avec moi.
demaniak
32

C'est probablement l' annotation Lombok @ Slf4j que vous utilisez. Vous devrez installer le plugin Lombok dans IntelliJ si vous voulez qu'IntelliJ reconnaisse les annotations Lombok. Sinon, à quoi vous attendez-vous si vous essayez d'utiliser un champ qui n'existe pas?

Ryan Stewart
la source
1
J'ai installé le plugin Lombok. Il ne semble pas y avoir beaucoup d'options de configuration. C'est peut-être un bug dans le plugin?
user1991839
1
Je l'ai utilisé avec succès avec IDEA 11 et 12. Parfois, quelque chose semble "oublier" Lombok, et j'obtiens un tas de lignes rouges dans le code source, mais il se construit toujours pour moi. Cela va et vient, donc le plugin n'est certainement pas exempt de bogues.
Ryan Stewart
Savez-vous s'il existe une solution de contournement pour surmonter cela? Vous souhaitez éventuellement informer IntelliJ des bibliothèques Lombok sans passer par le plugin? J'essaie d'utiliser IntelliJ pour les tests de débogage et cela me rend difficile de l'utiliser pour cela
user1991839
Désolé, je ne peux pas vous aider. Je n'ai pas encore beaucoup utilisé Lombok. Je viens de l'essayer dans quelques endroits. Je vais consulter la page du projet du plugin , mais j'ai le sentiment qu'il n'y a pas encore de très grande communauté autour de lui.
Ryan Stewart le
24

Dans Intellij version 2016, 2017, activez Préférences -> Compilateur -> Les processeurs d'annotations ne fonctionnent pas pour moi!

La case à cocher supplémentaire suivante aide: entrez la description de l'image ici

Tim Long
la source
1
J'ai ajouté le plugin et activé les processeurs d'annotation, toujours pas de chance. Pouvez-vous indiquer comment accéder à la case à cocher ci-dessus?
Philip John
@PhilipJohn: Dans le champ de recherche Préférences, saisissez "Lombok"?
Tim Long
en fait, nous devons également ajouter la dépendance "org.slf4j"
Vasyl Sarzhynskyi
16

2019:

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

Fichier> Paramètres> Plugins

entrez la description de l'image ici

Witold Kaczurba
la source
1
Nom: Plugin Lombok
Ismail Yavuz
10

Je suis peut-être en train de dégrossir 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 n'est que l'interface, vous avez besoin de l'implémentation concrète derrière cela pour fonctionner.

J'ai été trompé deux fois avec IDEA qui a tout gâché, maintenant je suis prêt à partir: D

Éthényle
la source
7

A travaillé pour moi !!! Il échouait sur CircleCI et sur Jenkins également.

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'
}
S34N
la source
Les 3 derniers éléments sont ce que j'avais besoin d'ajouter lors de l'utilisation de Gradle. Pour un projet précédent, j'avais déjà pris en charge le plugin Lombok, et la case à cocher du processeur d'annotations pour un projet précédent pour lequel nous avons utilisé Maven. J'ai rencontré cette erreur après avoir utilisé IntelliJ pour créer un projet Spring Boot avec Lombok sélectionné; il incluait les lignes compileOnly et annotationProcessor, mais pas les lignes test *.
Xenson
4

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

f120146
la source
4

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, résolvez-le.

moi pour sy
la source
4

Si vous utilisez maven, essayez d'ajouter le chemin Lombok à la maven-compiler-pluginliste du processeur d'annotations comme indiqué ci-dessous.

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

Changez la version selon votre version de Lombok. Autre que cela, assurez-vous que vous avez fait ce qui suit

  • installé le plugin Lombok pour Intellij.
  • Traitement des annotations activé pour votre projet sous File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor. Pour moi à la fois, Obtain processors from project classpathet Processor pathfonctionne. Vous ne savez donc pas ce qui fonctionnera pour vous, mais essayez celle qui fonctionne.

Et plutôt que de filmer dans le noir pendant des heures. Lire un peu comment les processeurs d'annotation fonctionnent et sont utilisés par le compilateur peut aider. alors lisez rapidement ci-dessous.

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

Meena Chaudhary
la source
C'est la seule solution qui a fonctionné pour moi!
cheemcheem le
2

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

Cochez «activer le traitement des annotations». Apply

Fermer

Sumukh Bhandarkar
la source
2

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

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

Cela a fonctionné pour moi.

Amrit Kr Lama
la source
2

Supprimer l'annotation @ Slf4J de la classe, puis la rajouter a fonctionné pour moi.

cécile
la source
2

1 Mes dépendances gradle lombok:

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

2 Après avoir activé "Annotations ..." dans IDEA (Paramètres), en tenant compte du fait que vous avez installé le plugin Lombok, cela a résolu le même problème

AlexPes
la source
1

Je voyais ce problème avec une ancienne version de Lombok lors de la compilation sous JDK8. La réinitialisation du projet sur JDK7 a permis de résoudre le problème.

John Chapman
la source
La mise à niveau de la dépendance lombok dans le pom fonctionne également :)
Christophe Moine
1

Cela n'aura pas été le problème d'OP, mais pour quiconque essaie tout sans succès:

J'avais des symptômes similaires. Chaque fois que je construisais après a mvn clean, il ne trouvait 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 en vain, j'ai découvert que le coupable était une importation statique@Getter unique d'une méthode annotée sur un champ statique .

Printemps 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!");
  }
}
Corwin Newall
la source
1

Ce n'est pas un problème IntelliJ. Si vous essayez sous la console, exécutez mvn install , se brise également. Toutes les annotations de lombok.extern nécessaires ajoutent des dépendances. Ce package regroupe les annotations suivantes:

  • CommonsLog
  • Flogger
  • Journal
  • JBossLog
  • Journal4
  • Log4j2
  • Slf4j
  • XSlf4j

Par exemple, pour Slf4j, il est nécessaire d'ajouter cette dépendance à votre pom.xml

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>
albertoiNET
la source
0

Après avoir activé les processeurs d'annotation et installé le plugin lombok, cela ne fonctionnait toujours pas. Nous avons contourné le problème en cochant l'option Idée "Déléguer la construction de l'EDI à la gradation"

Kristjan Peil
la source
0

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

Le chemin est: Fichier -> Préférences -> Construction, exécution, déploiement -> Outils de construction -> Maven

Radu Ciobanu
la source
0

Supprimez le dossier .idea et les fichiers .iml dans chaque module et reconstruisez la solution.

Rajiv Singh
la source
0

J'avais le plugin Lombok, les annotations étaient activées, il compilait à partir de la ligne de commande - tout et il ne voyait toujours pas mon projet comme maven (toutes les dépendances maven étaient rouges dans les fichiers source). Ensuite, j'ai cliqué deux fois sur SHIFT et cherché «maven» et parmi les résultats, il y avait «Recharger tous les projets Maven». Après l'avoir exécuté, l'onglet Maven est apparu et j'ai pu compiler, et tous les soulignements rouges dans le code source ont disparu.

Kirill G.
la source
0

Une chose simple, mais je l'ai compris, c'est: j'ai manqué d'ajouter @Logà la classe.

@Log
public class YourClassName {


}

Cela peut aider quelqu'un.

Shylendra Madda
la source
0

J'ai le même problème; J'utilise gradle et IDEA;

Il s'avère que cela est causé par la mauvaise version de gradle.

Dans gradle \ wrapper \ gradle-wrapper.properties, c'est:

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

Cependant, j'ai spécifié la version dans IDEA comme étant

D:\Library\gradle-5.2.1

Après avoir abaissé la version gradle à 4.10.x, le problème est parti.

yinhaomin
la source
0

Essayez de créer un lombok.configfichier dans le répertoire de base du projet et fournissez de la lombok.log.fieldNamevaleur.

Exemple: lombok.log.fieldName = LOG

Taras Melnyk
la source