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


202

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

我已经为IDEA安装了3rd-party插件,由于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依赖项中,我将无法运行项目的测试。
Nowaker

1
读者实际上更希望听到您已切换到Eclipse的消息。
Simeon Leyzerzon

1
读者来这里寻求解决问题的方法,使IntelliJ与lombok一起使用。
Florian F

Answers:


411

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

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

对于IDEA 2016.2:

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

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


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

  1. 访问https://projectlombok.org/download
  2. 将JAR文件下载到项目lib目录(例如,$HOME/dev/java/project/libs)。
  3. 启动IDE。
  4. 单击文件🠖设置
  5. 展开构建,执行,部署🠖编译器🠖注释处理器
  6. 确保选中启用注释处理
  7. 确保基于项目的模块设置选择了“ 相对于商店生成源”(如果“ 模块输出”目录不起作用,请返回并尝试其他设置)。
  8. 点击应用
  9. 单击插件
  10. 点击市场
  11. 将搜索字段设置为: lombok
  12. 安装龙目岛
  13. 点击确定
  14. 如果出现提示,请重新启动IDE。
  15. 单击文件🠖项目设置
  16. 选择图书馆
  17. 单击+符号添加新的项目库(或按Alt+Insert)。
  18. 选择Java
  19. 将路径设置为: $HOME/dev/java/project/libs/lombok.jar
  20. 单击确定
  21. 选择要应用的模块。
  22. 单击确定
  23. (可选)重命名lombokProject Lombok 1.18.8
  24. 单击确定

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


由于出现冻结问题(飞行员崩溃),我不得不停止Win10并打开了IntelliJ。重新启动时,我猜想项目目录中的想法文件已经更改(workspace.xml),之后我无法通过lombok生成我的getter / setter方法。在构建时出现“找不到符号”。我花了些力气才发现问题的根源。
亚历克斯

2
不要忘了设置注释处理器:lombok.launch.AnnotationProcessorHider $ AnnotationProcessor同时用于maven-compiler-plugin和Idea(设置->编译器->注释处理器)
Jan Kubovy

3
这在2016.2。中对我不起作用。Maven Web项目。唯一有效的方法是安装lombok插件。
maksimov

想法16.2.2 + gradle +已安装的lombok插件。我可以使用gradle runscript(从主意)运行不带此功能的项目。如果我想直接运行(因为这是使代码热交换工作的唯一方法),则必须启用注释处理。猜主意不会自动完全配置项目,尽管使用了插件也不会处理注释?
Neikius

在IDEA 2017.01中为我工作。安装Lombok可用于Intellisense,但不适用于编译,直到启用了注释处理器。
lreeder

73

启用注释处理将使其起作用

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

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

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


2
即使使用最新的intellij 15.0.2
BeepDog,2016年

1
仍存在于15.0.4中。我还必须将Lambok版本更新到最新版本,并将Java编译器更改为JAVAC。然后重建项目
Srikanta

在IntelliJ 2016.1.3中仍然必须执行:)您必须设置2个注释处理器。当您忘记它时会感到如此痛苦!
雷·亨特

仍然必须在IntelliJ 2016.3中做:)
Sukesh Kotian

即使通过在两个地方都激活,IntelliJ 2016.3.2仍无法使用Lombok 1.16.12进行编译:(
arcuri82,2017年

56

解决此问题的图片表示。

首先启用注释处理器,然后尝试。这可能会或可能不会。 在此处输入图片说明

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

在此处输入图片说明


3
谢谢..我有同样的问题。我在设置注释配置之前忘记安装插件了:)
TYL

19
  1. 确保已将其正确添加到您的项目中。

Gradle的示例:

 dependencies {
     compileOnly 'org.projectlombok:lombok:1.18.8'
     annotationProcessor 'org.projectlombok:lombok:1.18.8'
     ...
 }
  1. 为您的IDE安装Lombok插件
  2. 选中IDE(IntellijIdea)中的“启用批注处理”复选框,不知道其他IDE(如Eclipse)是否有类似这样的内容。

1
这个,这个和一千倍 谢谢,我被困了一个小时
ch1ll

1
是的,是的,我们应该先检查构建配置,然后再检查IDE设置。谢谢一堆!
Eric Tan

这是唯一有效的方法!为什么只有13个赞?
Doctorram

唯一对我有用的解决方案:D谢谢!!
比安卡

9

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

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

在此处输入图片说明

请记住要应用更改。

  1. 在相同的设置对话框中安装插件lombok

在此处输入图片说明

  1. 目前看来已经足够好了,它需要重新启动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

@ 0x01Brain当时我正在使用maven,但现在使用gradle代替。至于您的问题,我希望您可以提出一个新的具体问题来描述细节,并且有很多专家可以为您提供帮助;)
Hearen

没关系,我现在就可以编译它了,谢谢。我在权限方面有一些冲突,模块核心被导入utils模块,而utils模块被导入核心模块,这引起了冲突。
0x01Brain

8

如果您已按照以下步骤检查了这两个步骤

  1. 启用注释:这是在IntelliJ首选项中进行的检查。
  2. 将lombok导入IntelliJ classPath(首选项->插件)

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

您可以在首选项->构建,执行,部署->编译器-> Java编译器中检查编译器。

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


8

在最新的Gradle版本中,您应该使用注释处理器:

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

7

如前所述这里,报价:“你应该激活外部编译器选项并启用注释处理器或禁用外部编译器和注释的编译器禁用所有与龙目岛的工作”。这解决了我的问题。请注意,在收到此错误之前,我已经添加了Scala插件,因此我怀疑该插件更改了上述某些设置。



5

您是否将龙目岛作为项目的依赖项?在使用任何lombok注释的项目编译期间,lombok.jar必须位于类路径上。


原来它在注解处理器内部失败。我用输出日志更新了我的问题。
专家

3

我在 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->首选项->插件->浏览存储库->搜索“ Lombok”->安装插件->应用并重新启动IDEA


2

对于仍然遇到麻烦的人:

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


2
在Intellij停止抱怨之前,我还必须使缓存无效并重新启动。
汉斯(Hans)

2

1,为IDEA安装lombok插件

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

2,config lombok插件

启用注释处理将使其起作用

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

Intellij Idea->首选项->构建,执行,部署->编译器->注释处理器,选中“启用注释处理”复选框。在文件->其他设置->默认设置->构建,执行,部署->编译器->注释处理器中,选中“启用注释处理”复选框。


我在IntelliJ的“其他设置”中没有看到“默认设置”。这些仍然存在吗?我正在使用Ultimate Edition-version11.03
thenakulchawla

1

以上任何一种解决方案都对我没有用。我<scope>provided</scope>在pom.xml中添加 了依赖项,并且它起作用了。

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

您正在使用哪个版本的IntelliJ?另外,什么JDK版本?
realPK


1

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

因此,在“ 注释处理器设置”选项卡上,您必须手动指定“ 处理器路径”


0

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


我也有同样的问题。尝试更改Lombok的版本,以便IntelliJ再次下载依赖项。
Sanghyun Lee

0

我遇到了同样的问题,因此我将其留在这里以供我以后再作参考。

Alt+Enter对荷兰国际集团@Slf4j的注释我错误地选择了无效的进口。因此,如果代码无法编译,请确保您导入:

import lombok.extern.slf4j.Slf4j;


0

FWIW-如上所述设置编译器注释时,请确保还检查是否使用了任何配置文件,例如“ Maven默认注释处理器”。


0

即使您对其进行了正确配置并且在库中和Gradle依赖项列表中可见它,IntelliJ仍未在类路径中具有它。或者它在那里,但是配置了不同的作用域(例如:测试而不是编译)。

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

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

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



0

就我而言,我已经将下面提到的所有内容都准备就绪,但仍然无法正常工作。

  1. 我已经正确安装了龙目岛插件
  2. 注释处理器,也已选中。
  3. 我的Java编译器设置为JAVAC

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

  1. 截至2017年10月7日,将lombok更新为最新版本(v0.15)。
  2. 重新启动IntelliJ。
  3. 重建项目。

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

如何更新龙目岛

如何重建项目


0

您可以cannot find symbol variable log通过在IntelliJ IDEA 2017.1.3中使用lombok进行修复:

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


0

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

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

启用注释处理器:

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


0

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


0

对于MacOS上的Eclipse用户,请执行此操作。它为我工作。

  1. 将lombok.jar复制到Eclipse.app/Contents/MacOS目录中。
  2. 添加-javaagent:lombok.jar到Eclipse.app/Contents/Eclipse/eclipse.ini文件的末尾。
  3. 重新启动Eclipse并在项目属性中启用“注释处理”。

引用


0

除了所有答案中提到的以外,我还必须在pom.xml配置中添加以下代码,以使mvn全新安装工作。在添加此代码之前,我发现找不到用于getter和setter的符号。

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

0

对我来说有效的是:

  1. 我刚卸载了已安装的Lombok插件
  2. 我勾选了“启用注释插件”
  3. 我在同一页中选择了“从项目类路径获取处理器”

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.