为什么IntelliJ需要安装Lombok插件?

8
据我了解,Lombok使用Java的注解处理器生成额外的方法。
在使用Maven 3.5时,只需添加Lombok依赖项并添加一些注释,如@Getter、@Setter,即可完美运行,无需添加任何其他配置。
然而,如果我在IntelliJ IDEA 2018.2中打开此项目,则所有生成的getter/setter的用法都会被标记为错误。我已经打开了注解处理器,并尝试在IntelliJ中构建项目或在Maven中构建然后在IntelliJ中使用,但仍需要Lombok插件才能避免假错误。
这是一种错误吗?工作流程出了问题吗?还是Lombok不仅使用注解处理器,还有其他我不知道的东西,因此IntelliJ + javac无法弄清楚如何处理它?这很奇怪,因为javac本身编译那些文件没有错误。
我知道有很多问题“我在使用Lombok时遇到错误”,以及像“使用插件”这样的答案。我不是在问我是否应该使用插件,而是为什么我应该使用它,为什么IntelliJ不能在没有插件的情况下处理它,而javac可以。

Lombok确实会进行一些肮脏的邪恶魔法,这些魔法并不总是能够像其他注解处理器一样被处理。 - Louis Wasserman
3个回答

15

IntelliJ的代码分析引擎不使用javac或运行注释处理器。相反,IntelliJ使用自己的Java解析器和引用解决逻辑,并构建自己的代码模型。Lombok插件扩展了代码模型,以提供由Lombok注释处理器生成的声明信息。


这很有道理。但是IntelliJ有一个选项“注释处理器”->“启用注释处理”。看起来这个选项并没有像预期的那样起作用,它在使用内部编译器构建时不会运行注释处理器。我是正确的吗?我想要澄清一下,也许向JetBrains团队开放工单是个好主意。 - T. Gawęda
2
没有所谓的“内部编译器”。IntelliJ在执行代码分析时不会生成任何字节码。该选项使您能够在实际从IntelliJ中运行构建时运行注释处理器(使用常规javac编译器)。 - yole
好的,明白了。谢谢! :) - T. Gawęda

3

这是因为IDEA语法高亮使用内部Java解析器。如果IDEA只使用javac,那么它将无法在您输入时突出显示语法错误。它还可以提供更好的有关错误代码的提示,因此每个Java构造,特性或注释都必须由JetBrains团队实现,或者像本例中一样,有插件可用。

注解处理选项仅用于构建项目,这是通过javac完成的,但不用于语法高亮。


2
许多IDE使用lombok插件,不论是intelij-idea还是eclipse。javac与其相配合无任何问题,但请记住,它只在像"mvn clean package"这样的构建任务中运行。当你有了IDE时,它会有所不同——代码不像在构建任务中那样被处理。 该插件使IDE知道这个注解以及它在幕后生成的代码,而不需要javac。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接