在 IntelliJ IDEA 下使用 Lombok 时无法编译项目

Posted

技术标签:

【中文标题】在 IntelliJ IDEA 下使用 Lombok 时无法编译项目【英文标题】:Can't compile project when I'm using Lombok under IntelliJ IDEA 【发布时间】:2012-03-14 12:37:44 【问题描述】:

我正在尝试在使用 IntelliJ IDEA 11 开发的项目中使用 Lombok。

我已经安装了3rd-party plugin for IDEA,它似乎工作正常,因为 IDEA 可以看到所有自动生成的方法/字段。

所以我有一个使用 Slf4j 的类。我是这样注释的

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class TestClass

    public TestClass()
    
        log.info("Hello!");
    

但是当我构建我的项目编译器吐出:cannot find symbol variable log

你能告诉我这里缺少什么吗?

更新:原来是RequestFactory注解过程失败了。

input files: com.zasutki.courierApp.server.TestServlet, com.mine.courierApp.server.model.DatastoreObject

annotations: [javax.inject.Singleton, javax.inject.Inject, lombok.Getter, lombok.Setter, com.googlecode.objectify.annotation.Id, com.googlecode.objectify.annotation.OnSave]

Processor com.google.web.bindery.requestfactory.apt.RfValidator matches [lombok.Getter, com.googlecode.objectify.annotation.Id, javax.inject.Inject, lombok.Setter, com.googlecode.objectify.annotation.OnSave, javax.inject.Singleton] and returns false.

cannot find symbol variable log

关于解决方法的任何想法?

Update2:也许这不是读者想听到的,但我最终切换到Scala。

【问题讨论】:

即使没有插件也会出现错误。如果 Lombok 在我的 pom.xml 依赖项中,我将无法运行项目测试。 还有一个答案***.com/a/63632563/5410940 【参考方案1】:

我已在 IDEA 12 中通过在以下位置设置复选框 Enable annotation processing 来修复它:

设置 -> 编译器 -> 注释处理器

对于 IDEA 2016.2:

首选项... > 构建、执行、部署 > 编译器 > 注释处理器

启用后,运行 Build -> Rebuild Project 以识别注释并消除错误。


对于 IDEA 2019.2.1,根据项目的配置方式,安装 Project Lombok 插件可能还不够。这是将 Project Lombok 与 IntelliJ IDEA 结合使用的另一种方法:

    访问https://projectlombok.org/download 将 JAR 文件下载到项目 lib 目录(例如,$HOME/dev/java/project/libs)。 启动 IDE。 点击文件?设置。 扩展构建、执行、部署?编译器?注释处理器。 确保选中启用注释处理。 确保根据项目的模块设置选择Store generate sources relative to(如果Module output directory不起作用,请返回并尝试其他设置)。 点击应用。 点击插件。 点击市场。 将搜索字段设置为:lombok 安装 Lombok。 点击确定。 如果出现提示,请重新启动 IDE。 点击文件?项目结构。 选择。 单击 + 符号添加新项目库(或按 Alt+Insert)。 选择Java。 将路径设置为:$HOME/dev/java/project/libs/lombok.jar 点击确定。 选择要应用的模块。 点击确定。 (可选)将lombok 重命名为Project Lombok 1.18.8。 点击确定

该项目现在可以从 lombok 包中导入并使用 Project Lombok 注释(例如,lombok.Setterlombok.Getter)。

【讨论】:

我不得不停止我的 Win10 的冻结问题(飞行员崩溃)和 IntelliJ 被打开。重新启动时,我猜我的项目目录中的想法文件已被更改(workspace.xml),之后我无法通过 lombok 生成我的 getters/setters 方法。构建时“找不到符号”。我挣扎了一下以找出问题的根源。 不要忘记为 maven-compiler-plugin 和 Idea 设置注释处理器:lombok.launch.AnnotationProcessorHider$AnnotationProcessor(设置 -> 编译器 -> 注释处理器) 这在 2016.2 中对我不起作用。 Maven 网络项目。唯一有效的是安装 lombok 插件。 Idea 16.2.2 + gradle + 安装的 lombok 插件。使用 gradle runscript(来自想法)时,我可以在没有这个的情况下运行项目。如果我想直接运行(因为这是我知道的使代码热插拔工作的唯一方法),我必须启用注释处理。猜猜想法不会自动完全配置项目,尽管有插件,注释也不会得到处理? 除了上述步骤之外,我还必须在build.gradle 中加入以下几行:annotationProcessor "org.projectlombok:lombok:1.18.8"testAnnotationProcessor("org.projectlombok:lombok:1.18.8")【参考方案2】:

启用注释处理将使其工作

但是,如果您使用的是 Mac,请确保从两个可用位置 启用注释处理(勾选复选框)。

1.) Intellij Idea -> 首选项 -> 编译器 -> 注释处理器

2.) 文件 -> 其他设置 -> 默认设置 -> 编译器 -> 注释处理器

【讨论】:

即使使用最新的 intellij 15.0.2 仍然必须这样做 仍然存在于 15.0.4 中。我还必须将 Lambok 版本更新到最新版本并将 Java 编译器更改为 JAVAC。然后重建项目 在 IntelliJ 2016.1.3 中仍然必须这样做 :) 您必须设置 2 个注释处理器。当你忘记它时真是痛苦! 在 IntelliJ 2016.3 中仍然必须做 :) 即使在两个地方都激活,IntelliJ 2016.3.2 仍然无法使用 Lombok 1.16.12 编译:(【参考方案3】:

解决此问题的图片表示。

首先启用注释处理器并尝试。这可能有效,也可能无效。

发布后,您可以从 intellij 安装 lombok 插件,(安装后 Intellij 将重新启动以启用插件,因此请确保保存您的工作。(Intellij 在重新启动之前会保存所有更改,只是为了安全起见侧面。))下面的截图:

【讨论】:

谢谢.. 我也遇到了同样的问题。我在设置注释配置之前忘记安装插件了:)【参考方案4】:
    确保它已正确添加到您的项目中。

Gradle 示例:

 dependencies 
     compileOnly 'org.projectlombok:lombok:1.18.8'
     annotationProcessor 'org.projectlombok:lombok:1.18.8'
     ...
 
    为您的 IDE 安装 Lombok 插件 选中 IDE (IntellijIdea) 中的“启用注释处理”复选框,不知道其他 IDE (如 Eclipse)是否有类似的东西。

【讨论】:

这个,这个,还有一千倍这个。谢谢,我被困了一个小时 是的,你是对的,我们应该先检查构建配置,然后是 IDE 设置。非常感谢! 这是唯一有效的方法!为什么它只有 13 个赞?! 天哪,我忘了 Gradle 在新版本中添加了 annotationProcessor。谢谢你的回答。 经过这么多解决方案之后,这对我有用。添加 "annotationProcessor" 后,一切开始正常。【参考方案5】:

在最新的 Gradle 版本中,您应该使用 annotationProcessor:

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

【讨论】:

它对我有用。我使用 Kotlin DSL,我的代码是这样的:dependencies compileOnly("org.projectlombok:lombok:1.18.8") annotationProcessor("org.projectlombok:lombok:1.18.8") ... 【参考方案6】:

我正在使用 IntelliJ IDEA 2020.3(社区版)

在这里,除了安装 Lombok 插件并启用注释(由其他答案解释)。我还需要将标志 -Djps.track.ap.dependencies=false 设置为构建过程选项¹。

我不需要使用 -javaagent 方法,也不需要设置类路径。

¹。转到:文件 |设置 |构建、执行、部署 |编译器 | “共享构建过程 VM 选项”字段

参考资料:

https://github.com/rzwitserloot/lombok/issues/2592#issuecomment-705449860 https://youtrack.jetbrains.com/issue/IDEA-250718#focus=Comments-27-4418347.0-0

【讨论】:

谢谢,2020.3 CE 的工作就像一个魅力! 需要在 2021.1.2 做这个【参考方案7】:

仅供参考,使用IntelliJ 2018.3,我通过以下三个步骤解决了这个问题(使用@Data注解插入getter/setter):

    文件 -> 设置 -> 构建、执行、部署 -> 注释处理器 -> 启用注释处理;

请记住应用更改。

    在同一设置对话框中安装插件lombok

    目前看来已经足够了,需要重新启动 IntelliJ,然后重新构建您的项目。

最好的祝愿:)

【讨论】:

你有 maven 或 gradle 吗?我在让 lombok 为多模块项目工作时遇到问题。我不断收到错误消息:Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [module-core,module-utils] are excluded from annotation processing @0x01Brain 我当时正在使用 maven,但现在改用 gradle。至于您的问题,我希望您可以提出一个新的具体问题来描述细节,并且有很多专家会帮助您;) 没关系,我现在可以编译了,谢谢。我在依赖模块中遇到了一些冲突,模块核心被导入到 utils 模块中,而 utils 模块被导入到核心模块中,这产生了冲突。【参考方案8】:

如果你已经检查了这两个步骤如下

    启用注释:这是在 IntelliJ 中完成的检查 优先。 将 lombok 导入 IntelliJ classPath (首选项 -> 插件)

仍然出现错误,然后请检查编译器 - 如果是 JAVACECLIPSE

您可以在 Preferences -> Build,Execution,Deployment -> Compiler -> Java Compiler 中查看编译器。

将使用编译器更改为 Javac(如果是 Eclipse)。这对我有用。

【讨论】:

【参考方案9】:

如 here 所述,引用:“您应该激活外部编译器选项并启用注释处理器或禁用外部编译器并禁用所有注释编译器以使用 lombok”。这解决了我的问题。请注意,我在收到此错误之前添加了 Scala 插件,因此我怀疑该插件更改了上述某些设置。

【讨论】:

【参考方案10】:

intellij 有一个插件。看这里:https://projectlombok.org/download.html

【讨论】:

这个插件可以安装在 Intellij 的 Settings/Plugins 菜单中。确保您安装了最新的插件。升级到最新插件对我有用。【参考方案11】:

在 pom.xml 中包含以下内容对我有用:

<build>
        <defaultGoal>spring-boot:run</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>$java.version</source>
                    <target>$java.version</target>
                    <annotationProcessorPaths>
...
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>$lombok.version</version>
                        </path>       
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
</build>

【讨论】:

我还必须将requires org.slf4j; 添加到mole-info.java 中【参考方案12】:

你有 lombok 作为你项目的依赖吗? lombok.jar 必须在项目编译期间的类路径中,该项目使用任何 lombok-annotations。

【讨论】:

事实证明它在注释处理器中失败了。我用输出日志更新了我的问题。【参考方案13】:

对于那些仍然有麻烦的人:

除了启用注释处理器和安装 IntelliJ Lombok 插件的上述步骤之外,我还必须构建 -> 重建项目。

【讨论】:

我还必须在 Intellij 停止抱怨之前使缓存无效并重新启动。【参考方案14】:

1、为IDEA安装lombok插件

Intellij Idea -> 首选项 -> 插件 -> 输入 lombok -> 在存储库中搜索 -> 安装 -> 重启 IDEA

2、配置lombok插件

启用注释处理将使其工作

但如果您使用的是 Mac,请确保在以下两个位置启用注释处理:

Intellij Idea -> Preferences -> Build, Execution, Deployment -> Compiler -> Annotation Processors,勾选“Enable annotation processing”。 File -> Other Settings -> Default Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors,勾选“Enable annotation processing”。

【讨论】:

我在 IntelliJ 的其他设置中看不到默认设置。这些还存在吗。我正在使用终极版 - version11.03【参考方案15】:

我在Mac

这是我的 IntelliJ IDEA 和 Mac 版本 - IntelliJ IDEA 2017.1.5 Build #IU-171.4694.70 --- Mac OS X 10.12

除了在这两个地方启用注释处理(勾选复选框)。

1.) Intellij IDEA -> 首选项 -> 编译器 -> 注释处理器

.

2.) 文件 -> 其他设置 -> 默认设置 -> 编译器 -> 注释处理器

我也必须安装 Lombok 插件才能使其工作。

3.) Intellij IDEA -> Preferences -> Plugins ->Browse Repositories-> 搜索“Lombok”-> 安装插件 -> 应用并重启 IDEA

【讨论】:

【参考方案16】:

上述任何解决方案都对我不起作用。我在 pom.xml 的依赖项中添加了&lt;scope&gt;provided&lt;/scope&gt;,它起作用了。

<dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.20</version>
        <scope>provided</scope>
    </dependency>

【讨论】:

您使用的是什么版本的 IntelliJ?还有,什么JDK版本?【参考方案17】:

即使您已正确配置它并且在库和 Gradle 依赖项列表中可见,IntelliJ 仍然可能在类路径中没有它。或者它在那里,但配置了不同的范围(例如:测试而不是编译。)

首先,请确保您已安装插件并启用注释处理,如其他答案所述。

如果您仍然无法识别注释,请将光标放在其上,按 ALT+ENTER(或 OPTION+ENTER)并查看是否有菜单选项 Add library: Gragle: org.projectlombok:lombok:VERSION to class path。如果你能看到,就选择这个,它可能会解决你的问题。

您可以查看该库及其范围: 项目设置/模块/依赖项选项卡(在那里搜索lombok)

【讨论】:

这个解决方案应该得到更多的支持。我研究了几个小时,这是唯一有效的方法。【参考方案18】:

我在将 IDEA 更新到 2018.3 后遇到了这个问题。我必须更新所有现有的插件

【讨论】:

【参考方案19】:

在尝试了这里的所有建议之后,我还找到了另一种解决方案。似乎IDEA有时无法从项目类路径中获取处理器。

因此,在 Annotation Processors 设置选项卡上,您必须手动指定 Processor path

【讨论】:

【参考方案20】:

除了所有答案中提到的之外,我必须在 pom.xml 配置中添加以下代码以使 mvn clean install 工作。在添加此代码之前,我无法找到 getter 和 setter 的符号。

                    <annotationProcessorPath>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>1.18.8</version>
                    </annotationProcessorPath>

【讨论】:

【参考方案21】:

如果你做了这个问题中提到的所有事情并且仍然失败别忘了删除/target 项目下的文件夹。如果它仍然失败,请重新启动您的 IDE。 如果仍然失败,请重新启动您的计算机。

【讨论】:

【参考方案22】:

Jetbrains IntelliJ IDEA 编辑器从 2020.3 版本起无需插件即可与 lombok 兼容。

我用的是 2020.2 版本,我更新到 2020.3 就这样了。

【讨论】:

【参考方案23】:

如果以上都不起作用,则尝试更改 File->Project Structure->Project->Project Language Level > 8 Lambda,type annotations (Not SDK Default 8)

这对我有用。

【讨论】:

【参考方案24】:

我在使用 JDK8 构建时遇到了类似的问题,将项目设置回 JDK7 并且工作正常。可能是旧版本的 Lombok,无法在 JDK8 下编译。

【讨论】:

我也遇到了同样的问题。尝试更改 Lombok 的版本,以便 IntelliJ 再次下载依赖项。【参考方案25】:

如果您尝试了此处提供的所有解决方案但仍然无法编译源代码,请查看此处:Static import of builder class breaks bytecode generation in Maven - 查看您的源代码是否具有此类静态导入。这会影响 maven 插件,因此在 IntelliJ IDEA 之外的其他构建系统上编译将失败。

【讨论】:

【参考方案26】:

就我而言,我已经准备好下面提到的所有东西,但它仍然无法正常工作。

    我已经正确安装了 lombok 插件 注解处理器,也检查了。 我的 Java 编译器设置为 JAVAC

为了解决我的问题,我不得不

    于 2017 年 10 月 7 日将 lombok 更新至最新版本 (v0.15)。 重新启动 IntelliJ。 重建项目。

请参阅下面有关如何更新和重建项目的屏幕截图。

How to update lombok

How to rebuild project

【讨论】:

【参考方案27】:

在 IntelliJ IDEA 2017.1.3 中使用 lombok 时,您可以通过以下方式修复 cannot find symbol variable log

IntelliJ 首选项 > 构建、执行、部署 > 注释 处理器 > [检查] 启用注释处理 > 应用

【讨论】:

【参考方案28】:

安装以下插件并重新启动 IDE 以解决错误:

File -> Settings -> Plugins-> Browse Repositories -> Lombok Plugin

启用注释处理器:

File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors
File -> Other Settings -> Default Settings -> Compiler -> Annotation Processors

【讨论】:

【参考方案29】:

我遇到了类似的问题。以下对我有用。

下载(从这里https://projectlombok.org/download)并将jar添加到您的项目结构中。

步骤:文件 -> 项目结构 -> 全局库

【讨论】:

【参考方案30】:

如果 lombok 库设置正确,如上所述,单击无法编译的注释,Alt-Enter,将出现正确的导入,代码将编译。 - 我花了一段时间才弄清楚。我把它放在这里是为了以防人们可能会错过简单的显而易见的事情。

【讨论】:

以上是关于在 IntelliJ IDEA 下使用 Lombok 时无法编译项目的主要内容,如果未能解决你的问题,请参考以下文章

如何卸载intellij idea

在 IntelliJ IDEA 下使用 Lombok 时无法编译项目

Mac下利用brew安装Intellij IDEA

intellij idea下使用Maven搭建SpringMVC

Ubuntu 17.04下创建IntelliJ IDEA图标快捷方式

SpringBoot在IntelliJ IDEA下for MAC 热加载