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?


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

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?


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


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


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


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

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.


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.


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


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


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.


2

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


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


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.


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!");
  }
}

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>

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"


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


0

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


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.


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.


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.


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.