使用Lombok的@ Slf4j和Intellij构建:找不到符号日志


113

我有一个从命令行构建没有问题的Maven项目。但是,当我使用IntelliJ构建它时,出现错误:

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

在Java文件中没有定义或导入日志,但是有一个

@Slf4j
final public class FileName {

类主体之前的语句,应定义日志类。

在项目结构窗口中,用于以下类的类:

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

在库下列出,并指示已下载并可用。

是否知道为什么会通过命令行而不是通过IntelliJ使用maven构建它,以及如何解决此问题?


5
同样,重新安装Lombok插件也有帮助。
Alex Shumilov

Answers:


170

除了安装Lombok插件外,还请确保在以下Enable annotation processing位置打勾“ ”复选框:

Preferences > Compiler > Annotation Processors

注意:从IntelliJ 2017开始,“ Enable Annotation Processing”复选框已移至:

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

1
我没有启用注释处理并且可以运行:| 我确实安装了lombok插件。
本·乔治

我安装了插件,并且无需更改此设置即可正常工作。但是,我决定对其进行适当的更改。
sheldonkreger

6
使用IntelliJ 2017.2和Lombok插件0.14.16,需要设置“启用注释处理”,并且该复选框位于“首选项”->“构建,执行,部署”->“编译器”->“注释处理器”下。
Niemi

1
IntelliJ 2018.2,已安装lombok插件1.14。我仍然必须在IntelliJ中启用注释处理。文件->设置->构建,执行,部署->编译器->注释处理器。IntelliJ并不是我真正的赢家。
demaniak

32

大概就是您正在使用的Lombok @ Slf4j批注。如果要IntelliJ识别Lombok批注,则需要在IntelliJ中安装Lombok插件。否则,如果您尝试使用不存在的字段,您会期望什么?


1
我已经安装了Lombok插件。在配置选项方面似乎没有太多。也许这是插件中的错误?
user1991839

1
我已经在IDEA 11和12中成功使用了它。有时,关于Lombok似乎有些“忘了”,并且在源代码中出现了很多红线,但是仍然为我构建。但是它来来往往,所以该插件绝对不是没有错误的。
瑞安·斯图尔特

您是否知道是否有解决方法?像不通过插件就通知IntelliJ Lombok库一样?我正在尝试使用IntelliJ进行调试测试,这使我很难为此使用它
user1991839 2013年

抱歉,不能为您服务。我还没用过龙目岛。我只是在几个地方尝试过。我会查看插件的项目页面,但是我感觉周围还没有一个很大的社区。
瑞安·斯图尔特

24

在Intellij 2016、2017版本中,启用首选项->编译器->注释处理器对我不起作用!

以下其他复选框将帮助您: 在此处输入图片说明


1
我添加了插件并启用了注释处理器,但仍然没有运气。您能否提供如何访问上述复选框?
菲利普·约翰

@PhilipJohn:在“首选项”搜索框中,键入“ Lombok”吗?
Tim Long

实际上,我们还需要添加“ org.slf4j”依赖项
Vasyl Sarzhynskyi


10

我可能没有提到一个死的话题,但是一个简单的解决方案是检查您的依赖项(例如,Maven的pom)是否包含logback-corelogback-classic

Slf4j只是接口,您需要它后面的具体实现才能工作。

我被IDEA搞砸了两次,现在我很高兴:D


7

为我工作!!!在CircleCI和Jenkins上也都失败了。

如果您是Gradle用户,请尝试将以下内容添加到您的依赖项中:

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

最后3项是使用Gradle时需要添加的内容。对于先前的项目,我已经处理过Lombok插件,以及我们使用Maven的先前项目的注释处理器复选框。在使用IntelliJ创建选择了Lombok的Spring Boot项目之后,我遇到了此错误;它包括compileOnly和注解行,但不包括test *行。
Xenson

4

在IDEA 13中,这似乎不再是问题,您只需要安装Lombok插件即可。


4

安装了lombok插件并重新启动Idea后,我刚刚安装了最新的Idea Verion 2108.1,并发现了此问题。


4

如果您使用的是maven,请尝试将Lombok路径添加到maven-compiler-plugin注释处理器列表,如下所示。

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

根据您的Lombok版本更改版本。除此之外,请确保您已完成以下操作

  • 为Intellij安装了Lombok插件。
  • 在下为您的项目启用了注释处理File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor。对我俩来说,Obtain processors from project classpath并且Processor path正在工作。因此,不确定是否适合您,但尝试任何可行的方法。

而不是在黑暗中拍摄数小时。稍微阅读注释处理器的工作方式以及编译器使用的注释可能会有所帮助。因此,请在下面快速阅读。

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


这是唯一对我有用的解决方案!
cheemcheem


2

我尝试了几乎所有提到的答案,但对我没有任何帮助。我的gradle构建每次都失败。刚刚找到此解决方案:

添加annotationProcessor 'org.projectlombok:lombok' 您的build.gradle。

这对我有用。


2

从类中删除@ Slf4J批注,然后重新添加它对我有用。


2

1我的gradle龙目岛依赖:

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

2在IDEA(设置)中启用“注释...”后,考虑到您已经安装了Lombok插件,这解决了我同样的问题


1

在JDK8下编译时,我在较早版本的Lombok上看到此问题。将项目重新设置为JDK7可以解决问题。


升级pom中的lombok依赖项也可以进行:)
Christophe Moine

1

这不会是OP的问题,但是对于任何尝试一切都没有成功的人来说:

我有类似的症状。每当我经过建mvn clean,也不会找到log,或getXYZ(),或builder(),或任何东西。

[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

阅读完我能找到的关于QueryDSL / JPA / Hibernate / Lombok / IntelliJ / Maven问题的所有答案后,我发现问题的根源是方法的单个静态导入,该@Getter方法在静态字段上进行了注释

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

这不是IntelliJ问题。如果在控制台下尝试,请运行mvn install,也会中断。来自lombok.extern的所有注释需要添加依赖项。该软件包将以下注释分组:

  • CommonsLog
  • Flogger
  • 记录
  • JBossLog
  • 日志4
  • Log4j2
  • Slf4j
  • XSlf4j

例如,对于Slf4j,必须将此依赖项添加到pom.xml中

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


0

对我来说,解决问题的方法是在Maven设置中选中“使用插件注册表”复选框。

路径是:文件->首选项->构建,执行,部署->构建工具-> Maven



0

我有Lombok插件,启用了注释,它是从命令行编译的-一切,它仍然没有将我的项目视为maven(所有maven依赖项在源文件中都是红色的)。然后,我两次单击SHIFT并搜索“ maven”,结果中有“重新加载所有Maven项目”。运行它之后,出现了Maven选项卡,并且我可以进行编译,并且源代码中所有红色下划线都消失了。


0

一个简单的事情,但我发现是:我错过了添加@Log到班级的机会。

@Log
public class YourClassName {


}

它可以帮助某人。


0

我有同样的问题; 我使用gradle和IDEA;

事实证明,这是由gradle版本错误引起的。

在gradle \ wrapper \ gradle-wrapper.properties中,它是:

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

但是,我在IDEA中指定的版本为

D:\Library\gradle-5.2.1

将gradle版本降低到4.10.x之后,问题消失了。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.