为什么我必须添加Lombok插件,为什么添加依赖项还不够

时间:2018-09-05 11:17:32

标签: java plugins dependencies lombok

我很好奇为什么必须添加Lombok插件。为什么不像pom.xml中那样向Mockito添加依赖项呢?

2 个答案:

答案 0 :(得分:2)

Lombok是所谓的注释处理器,Mockito是“仅”一个常规Java库。注释处理器

  • 定义您可以在Java代码中使用的注释,并且
  • 使用这些注释编译源代码时,它们会进入编译过程并更改输入源代码或生成新代码。
JDK随附的Java编译器

javac 会自动检测类路径上的注释处理器并对其进行调用,以便它们可以处理其注释并生成代码。因此,当您将Lombok添加到pom.xml中并调用mvn package(调用javac)时,一切都很好:Lombok现在位于类路径中,并由javac调用,并且可以在代码中使用Lombok的注释。

javac的主要目的是将有效的Java代码编译为字节码。但是,在编写Java代码时,大多数情况下该代码无效。因此,高级IDE(例如Eclipse或IntelliJ IDEA)着重于帮助开发人员,即使其代码无法编译。如果他们只是将javac用作分析和编译Java代码的唯一手段,那么他们对开发人员的帮助就不会很大。代码大纲,依赖关系分析,查找方法调用目标等功能也必须尽可能地与无效代码配合使用。

为此,Eclipse和IntelliJ IDEA都有自己的Java编译器。例如,Eclipse的编译器使用完全不同的代码抽象语法树(AST)表示形式。它主要是龙目岛运行的AST。因此,Lombok对每个注释都有两个注释处理程序:一个用于javac,一个用于Eclipse。这就是Lombok需要安装在Eclipse中的原因:也要能够连接到Eclipse的内部编译器

答案 1 :(得分:1)

您必须了解Lombok的实际工作方式。

这里有两个部分:

  • 注释,例如@ Data,@ ToString,...
  • 该“插件”实际生成相应的代码

您需要对lombok的依赖,以便编译器/ IDE可以自己解析注释。 (注释需要导入,就像您在源代码中使用的任何其他“元素”一样)。但这只能确保您的编译器/ IDE 知道这些是有效的注释。

真正的窍门是,稍后,当将代码编译到类文件中时,lombok的“活动”部分可用于实际生成代码。

这类似于java bean validation。您需要在编译时导入一个JAR,以便已知所有不同的验证批注,并且可以在源代码中使用它们。但是为了使对象得到主动验证,您以后需要一些其他组件来执行此操作(这里的区别是验证发生在运行时,而Lombok只是编译时的事情)。

请注意:“注释用法/处理”的第二种方法是更常见的路径。在有关JUnit和@RunWith的示例中,该注释告知运行时 JUnit 使用该模拟流道类(而不是其自己的流道实现)。然后,该模拟赛跑者知道如何在运行时使用所有其他注释。相同的故事:源代码中存在的注释必须是已知的,对于活动部分,某些组件在运行时正在起作用。

当然,您也可以使用注释来影响构建任务,但是如上所述,这种情况不那么常见,而且方式也更复杂。