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

时间:2012-02-24 02:03:30

标签: java intellij-idea lombok

我正在尝试在我使用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

有关解决方法的任何想法吗?

更新2:也许这不是读者想要听到的内容,但我最终切换到Scala

38 个答案:

答案 0 :(得分:335)

我已在IDEA 12中通过设置复选框Enable annotation processing修正了它:

  

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

对于IDEA 2016.2:

  

偏好设置...>构建,执行,部署>编译器>注释处理器

答案 1 :(得分:71)

启用注释处理将使其正常工作

但如果您使用 Mac ,请确保从 这两个地方 启用注释处理(勾选复选框)。

1。)Intellij Idea - >偏好 - >编译器 - >注释处理器

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

答案 2 :(得分:41)

解决此问题的图片表示。

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

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

enter image description here

答案 3 :(得分:12)

我使用的是 IntelliJ IDEA 2020.3(社区版)

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

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

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

参考文献:

答案 4 :(得分:10)

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

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

答案 5 :(得分:7)

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

答案 6 :(得分:6)

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

答案 7 :(得分:6)

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

  1. 启用注释:这是在IntelliJ中完成的检查 喜好。
  2. 将lombok导入IntelliJ classPath (首选项 - >插件)
  3. 然后仍然出现错误请检查编译器 - 如果它是 JAVAC ECLIPSE

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

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

答案 8 :(得分:4)

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

答案 9 :(得分:3)

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

答案 10 :(得分:3)

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

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

enter image description here

  

请记住 应用 更改。

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

enter image description here

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

最良好的祝愿:)

答案 11 :(得分:3)

我在Mac

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

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

  

1。)Intellij IDEA - &gt;偏好 - &gt;编译器 - &gt;注释处理器

  

2。)文件 - &gt;其他设置 - &gt;默认设置 - &gt;编译器 - &gt;注释处理器

我还必须安装Lombok插件才能使其正常工作。

  

3。)Intellij IDEA - &gt;偏好 - &gt;插件 - &gt;浏览存储库 - &gt;搜索&#34;龙目岛&#34; - &gt;安装插件 - &gt;应用并重新启动IDEA

答案 12 :(得分:2)

对于那些仍然遇到麻烦的人:

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

答案 13 :(得分:2)

1,为IDEA安装lombok插件

Intellij Idea - &gt;偏好 - &gt;插件 - &gt;输入lombok - &gt;在存储库中搜索 - &gt;安装 - &gt;重启IDEA

2,配置lombok插件

启用注释处理将使其正常工作

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

Intellij Idea - &gt;偏好 - &gt;构建,执行,部署 - &gt;编译器 - &gt;注释处理器,选中&#34;启用注释处理&#34;的复选框。 档案 - &gt;其他设置 - &gt;默认设置 - &gt;构建,执行,部署 - &gt;编译器 - &gt;注释处理器,选中&#34;启用注释处理&#34;。

的复选框

答案 14 :(得分:1)

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

因此,在 Annotation Processors 设置标签上,您必须手动指定 Processor path

答案 15 :(得分:1)

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

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

答案 16 :(得分:1)

使用上述任何解决方案对我都没有用。我将<scope>provided</scope>添加到pom.xml中的依赖项中并且它有效。

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

答案 17 :(得分:1)

Jetbrains IntelliJ IDEA 编辑器从 2020.3 版本开始与 lombok 兼容,无需插件。

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

答案 18 :(得分:0)

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

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

引用this

答案 19 :(得分:0)

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

答案 20 :(得分:0)

我想我还没有阅读答案中的最后一步。 (Mac + IntelliJ Ultimate 2020.1) 就我而言,这只是一个愚蠢的原因,但这些原因可能会占用大部分时间,因为错误并未直接引用它。

删除并重新克隆项目后,我出现了相同的 lombok 错误。 执行完本线程前面提到的步骤后,我仍然遇到错误,然后我发现我的 SKD 默认为版本 11。我将其改回 1.8,一切又恢复正常。

文件 --> 项目设置 --> 项目 我将项目 SDK 和项目语言级别更改为 1.8

PS 在此 IntelliJ 版本中,mac 上默认设置的位置与之前提到的不同: File --> New Project Settings --> Preferences for new Projects --> Build, Execution, Deployment --> Compiler --> Annotation Processors --> 'check' Enable annotation processing

希望对大家有帮助

答案 21 :(得分:0)

对我来说有效的方法:

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

答案 22 :(得分:0)

对于IntelliJ IDEA 2020.1.1,启用Kotlin插件可以解决此问题。

答案 23 :(得分:0)

如果您做了此问题中提到的所有事情,并且仍然失败,请不要忘记删除/目标”文件夹。并且如果仍然失败,请重新启动IDE。 而且,如果仍然失败,请重新启动计算机。

答案 24 :(得分:0)

启用注释器处理器后,我必须更新到最新版本的lombok:

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

Intellij版本:

IntelliJ IDEA 2020.3 (Community Edition)
Build #IC-203.5981.155, built on November 30, 2020
Runtime version: 11.0.9+11-b1145.21 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 10.16
GC: ParNew, ConcurrentMarkSweep
Memory: 1981M
Cores: 8
Non-Bundled Plugins: org.intellij.plugins.hcl, Lombook Plugin, org.sonarlint.idea, in.1ton.idea.spring.assistant.plugin, org.jetbrains.kotlin, gherkin, cucumber-java

答案 25 :(得分:0)

确保已正确添加

from django.db import models
from django.contrib.auth.models import User

# Create your models here.

class Ingredient(models.Model):
    name = models.CharField(max_length=500, blank=False, null=False)
    link = models.CharField(max_length=500, blank=True, null=True)

    def __str__(self):
        return self.name

class Recipe(models.Model):
    title = models.CharField(max_length=250, blank=False, null=False)
    notes = models.TextField(blank=True, null=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

class Recipe_Ingredient(models.Model):
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    ingredient = models.ForeignKey(Ingredient, on_delete=models.CASCADE)
    unit = models.ForeignKey(Unit, on_delete=models.CASCADE, blank=True, null=True)
    amount = models.DecimalField(decimal_places=3, max_digits=10000)

class Step(models.Model):
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    step_number = models.IntegerField(default=1)
    step = models.TextField(blank=True, null=True)

    def __str__(self):
        return self.step

答案 26 :(得分:0)

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

答案 27 :(得分:0)

如果属性foo为布尔值,则由Lombok @Data提供isFoo()而不是getFoo()

答案 28 :(得分:0)

Faced similar problem. Below fixed worked for me.
 下载(从此处[{https://projectlombok.org/download][1])下载并添加jar  在您的项目结构中。

  

步骤:File-> Prject结构-> Global Libraries

答案 29 :(得分:0)

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

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="element">e1</div>
<div class="element">e2</div>
<div class="element">e3</div>
<div class="element">e4</div>

启用注释处理器:

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

答案 30 :(得分:0)

您可以在IntelliJ IDEA 2017.1.3中使用lombok时修复cannot find symbol variable log

  

IntelliJ偏好设置&gt;构建,执行,部署&gt;注解   处理器&gt; [检查]启用注释处理&gt;应用

答案 31 :(得分:0)

就我而言,我已经掌握了下面提到的所有内容,但仍然无法正常工作。

  1. 我正确安装了lombok插件
  2. 注释处理器,也已检查过。
  3. 我的Java编译器设置为JAVAC
  4. 要解决我的问题,我必须

    1. 截至2017年10月7日,将lombok更新至最新版本(v0.15)。
    2. 重启IntelliJ。
    3. 重建项目。
    4. 请参阅下面有关如何更新和重建项目的屏幕截图。

      How to update lombok

      How to rebuild project

答案 32 :(得分:0)

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

答案 33 :(得分:0)

要实现这一点,只需安装&#34; Lombok插件&#34;对于IntelliJ。您不需要像其他评论员所建议的那样,通过启用&#34; Annotation Processors&#34;做任何事情。 (我已经使用最新版本的IntelliJ IDEA进行了测试,目前为2017.1.2)。要安装插件,请转到“设置”,然后选择“插件”,然后单击“#34;浏览存储库&#34;按钮,然后搜索&#34; Lombok&#34;,并安装Lombok插件。系统将提示您重新启动IntelliJ。之后,您应该能够从IntelliJ编译,并且您不会再接收错误检查。

答案 34 :(得分:0)

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

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

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

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

答案 35 :(得分:0)

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

答案 36 :(得分:0)

我遇到了同样的问题所以我会把它留在这里,以供将来参考我的遗忘。

Alt+Enter @Slf4j注释时,我错误地选择了无效导入。因此,如果代码未编译,请确保导入:

import lombok.extern.slf4j.Slf4j;

答案 37 :(得分:0)

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