6

如果我在一个项目中使用 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)

有什么想法可以让它更快吗?

4

2 回答 2

8

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

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

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

所以回到你的问题,我看不出你怎么能得到更好的编译时间,除非一起删除 Lombok。

于 2013-03-20T09:42:40.073 回答
8

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

我还对我的项目进行了delomboked以比较速度,并且delomboked代码和带有lombok-annotations的代码之间没有太大区别。

您可以在此处下载边缘构建: http ://projectlombok.org/download-edge.html

于 2013-04-11T08:48:41.087 回答