Lombok减缓了大型项目的构建过程

时间:2013-03-20 08:17:27

标签: java performance build lombok ibm-rad

如果我在一个项目中使用Lombok(大约15个独立的项目 - EJB,Web,......),Lombok将构建过程减慢2-3倍。有没有解决方案,或者这是龙目岛的劣势?

只是为了看项目的大小,就是这样 400 @Getter, 120 @Data, 250 @Setter和 100 @EqualsAndHashCode

环境:IBM Rational Application Developer 8.0.4,包含最新版本的Lombok(0.11.6)

任何让它更快的想法?

2 个答案:

答案 0 :(得分:5)

最后,有一个边缘构建可用,这非常加速了龙目岛!他们做了很多工作来加快速度,现在它对我来说很好。构建时间几乎减半,我不必每次都等待保存文件。

我还删除了我的项目以获得速度的比较,并且删除代码和带有lombok-annotations的代码之间没有太大区别。

您可以在此处下载edge-build: http://projectlombok.org/download-edge.html

答案 1 :(得分:3)

Lombok是一个注释处理器(编译器插件,如果你愿意的话)。在编译时,每次在代码中找到一组特定的注释时都会调用它,并且有机会生成新的源或抛出编​​译器错误。如果在编译轮次期间生成了任何新内容,则必须执行另一个新内容,直到所有内容都已成功编译。 所以,是的,需要时间来查找注释,根据需要处理它们(见下文),并运行额外的编译轮次。

Annotation处理器规范明确禁止他们修改现有代码 - 您可以生成新类或额外文件(.properties等),但不能更改现有代码。 Lombok通过检测所使用的编译器并破解其内部API以更改内存中的AST以添加访问器等来解决这个问题。这只是......可怕的。

在我看来,这是一项重大的技术风险。最后,Lombok什么都不做你的IDE无法做到的 - 生成访问器等,但可能会危及你的整个项目 - 如果你升级你的编译器并且Lombok不支持它,或者引入了一个bug呢?您最终会得到一个非编译代码(或者在您的情况下,编译非常慢),只是为了隐藏一些没有任何损害的样板方法,除了在代码中占用几行。 但那只是我的意见:))

所以回到你的问题,我不知道你如何能够获得更好的编译时间,除非完全删除Lombok。