150

我有一个从命令行构建没有问题的 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

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

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

4

34 回答 34

208

除了安装 Lombok 插件外,还要确保勾选“ Enable annotation processing”复选框:

Preferences > Compiler > Annotation Processors

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

Settings > Build, Execution, Deployment > Compiler > Annotation Processors
于 2013-03-04T23:14:21.280 回答
41

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

于 2013-02-14T02:19:25.673 回答
25

在 Intellij 版本 2016、2017 中,启用 Preferences -> Compiler -> Annotation Processors 对我不起作用!

以下附加复选框有帮助:在此处输入图像描述

于 2017-04-06T11:17:54.037 回答
23

这里有以下步骤:

步骤 1.在 File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor 下为您的项目启用注释处理

截屏 在此处输入图像描述

步骤 2.重启 IDE 后在 IntelliJ IDE 中安装 lombok 插件。截屏

在此处输入图像描述

步骤 3.在 build.gradle 文件中添加依赖项。

 compileOnly 'org.projectlombok:lombok:1.18.12'
 annotationProcessor 'org.projectlombok:lombok:1.18.12'

如果您在测试中使用 lombok,则需要添加:

testCompileOnly 'org.projectlombok:lombok:1.18.12'  
testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'

https://developervisits.wordpress.com/2020/09/16/building-with-lomboks-slf4j-and-intellij-cannot-find-symbol-log/

希望这个答案对您有所帮助。

于 2020-09-16T18:55:25.717 回答
22

2019:

获取一个插件,您就可以排序了...

文件 > 设置 > 插件

在此处输入图像描述

于 2017-10-25T13:48:52.467 回答
17

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

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

dependencies {
    //Other Dependencies >>

    //LOMBOK Dependencies
    annotationProcessor 'org.projectlombok:lombok'
    compileOnly 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'
    testCompileOnly 'org.projectlombok:lombok'
}
于 2019-07-02T16:26:10.703 回答
14

如果您包含logback-corelogback-classic,我可能会取消一个死主题,但一个简单的解决方案是检查您的依赖项(例如 Maven 的 pom)。

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

我已经被IDEA搞砸了两次,现在我可以走了:D

于 2015-02-12T08:08:37.853 回答
12

因此,即使在启用注释处理并安装 Lombok 插件后问题仍然存在。

IDEA 2020.3 和 Lombok存在问题,您可以按照此修复程序解决此问题。

基本上,添加-Djps.track.ap.dependencies=false到 VM 选项中,您可以在:Preferences -> Compiler 中找到它。命名为“共享构建过程 VM 选项”

于 2020-12-08T15:28:17.243 回答
7

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

  • 公共日志
  • 鞭打者
  • 日志
  • JBoss日志
  • 日志4
  • 日志4j2
  • slf4j
  • XSlf4j

例如,对于 Slf4j,有必要将此依赖项添加到您的pom.xml

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>
于 2019-11-23T19:46:27.467 回答
5

如果您使用的是 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

于 2019-11-28T13:31:01.067 回答
4

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

于 2014-04-24T15:18:34.677 回答
4

我刚刚安装了最新的idea版本2108.1,发现这个问题,安装lombok插件后重启idea解决了。

于 2018-07-19T03:33:18.537 回答
4

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

于 2019-09-12T18:47:51.347 回答
4

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

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

这对我有用。

于 2019-08-28T12:40:32.190 回答
3

1 My gradle lombok dependecies:

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

2 After enabling "Annotations..." in IDEA (Settings), taking into account that you have installed Lombok plugin, that resolved my the same issue

于 2019-11-06T21:47:18.063 回答
2

在如下警告之后,我遇到了同样的错误:

java: You aren't using a compiler supported by lombok, so lombok will not work and has been disabled.
  Your processor is: com.sun.proxy.$Proxy27
  Lombok supports: OpenJDK javac, ECJ

就我而言,这是lombok < 1.18.16 和 IDEA 2020.3 的不幸组合

于 2020-12-03T13:02:18.070 回答
2

这对我有用: File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

勾选“启用注释处理”。 Apply

于 2018-10-08T05:34:27.260 回答
1

在 JDK8 下编译时,我在旧版本的 Lombok 上看到了这个问题。将项目设置回 JDK7 使问题消失了。

于 2015-03-30T23:30:48.223 回答
1

这不会是 OP 的问题,但对于尝试一切都没有成功的其他人:

我有类似的症状。每当我在 a 之后构建mvn clean时,它都不会找到log, or getXYZ(), or 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

春季 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!");
  }
}
于 2019-05-14T23:52:45.860 回答
1

启用注释处理器并安装 lombok 插件后,它仍然无法正常工作。我们通过检查 Idea 选项“将 IDE 构建委托给 gradle”来解决它

于 2019-05-30T11:42:37.120 回答
1

IDEA 2021 仍然存在问题,要解决它,请确保您的项目依赖项中有最新版本的 lombok。

于 2021-05-21T16:19:24.017 回答
0

如果有人仍然面临这个问题,那不是因为 IntelliJ,而是您需要为 maven 编译器插件指定注释处理器(如果您使用的是 maven,则原因)

            <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                    <configuration>
                        <source>11</source>
                        <target>11</target>
      
                            <annotationProcessorPath>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                                <version>1.18.12</version>
                            </annotationProcessorPath>

                        </annotationProcessorPaths>
                    </configuration>
             </plugin> 
    ```
于 2021-09-28T14:06:28.357 回答
0

使用此依赖项并尝试:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
</dependency>
于 2021-04-17T16:26:59.277 回答
0

对我来说,如果您使用的是 Maven,它就可以工作。我在我的 spring boot 项目的 pom.xml 中添加了这个。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

然后在我重新启动 IntelliJ 后,您只需在键入 @Slf4j 时控制+空格即可自动导入库。

并且不要忘记启用启用注释处理:设置>构建,执行,部署>编译器>注释处理器

于 2021-08-03T07:51:18.970 回答
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 后,问题就消失了。

于 2020-08-11T06:55:13.277 回答
0

没有一个答案可以解决您的项目中可能存在不正确依赖项的事实,如果您使用的是 spring boot,则依赖项定义很容易:

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <!--<version>1.18.12</version> you dont need to specify a version-->
        <type>jar</type>
    </dependency>

但是如果你没有使用 spring boot,你可以导入所有依赖项:

        <!--region Lombok Configuration -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.8.0-beta2</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <type>jar</type>
        </dependency>
        <!-- endregion -->

这假设您有插件工作并且在以下"Enable Annotation Processing"位置激活了复选框:

设置[Ctrl+Alt+S] >构建、执行、部署>编译器>注释处理器

于 2021-11-30T17:56:30.700 回答
0

这就是我为什么 IntelliJ 没有找到我的 maven 依赖项的问题:我在 pom.xml 的其他地方有一个重复的标签“依赖项”。

于 2021-03-15T10:54:26.717 回答
0

尝试在项目基础目录lombok.config下创建文件并提供价值。lombok.log.fieldName

例子:lombok.log.fieldName = LOG

于 2020-08-13T12:54:56.483 回答
0

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

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

于 2019-07-26T02:29:06.557 回答
0

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

于 2020-07-04T13:59:35.010 回答
0

一件简单的事情,但我想通了:我错过了加入@Log课程。

@Log
public class YourClassName {


}

它可能会帮助某人。

于 2020-08-09T09:53:11.993 回答
0

删除每个模块中的 .idea 文件夹和 .iml 文件并重建解决方案。

于 2020-06-03T11:10:02.380 回答
0

这是另一篇相关文章Lombok not working with IntelliJ 2020.3 Community Edition,它可能会解决用户使用lombookIntelliJ 2020.3 CommunityEdition.

于 2021-01-09T01:46:07.420 回答
0

使用的编译器 javac 为 14 或 17,而项目的目标版本为 1.8

于 2021-10-12T13:22:14.417 回答