龙目岛减慢了大型项目的构建过程

anm*_*anm 4 java performance build lombok ibm-rad

如果我在一个项目(大约15个单独的项目-EJB,Web等)中使用Lombok,则Lombok会使构建过程减慢2-3倍。有什么解决办法吗,还是龙目岛的劣势?

刚看到这个项目的规模,这是约400 @Getter,120 @Data,250 @Setter和100 @EqualsAndHashCode

环境:具有最新版本的Lombok(0.11.6)的IBM Rational Application Developer 8.0.4

有什么想法可以使其更快吗?

anm*_*anm 7

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

我还对项目进行了组合,以进行速度比较,并且组合代码和带有lombok批注的代码之间的差异不是很大。

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


Oli*_*ier 5

Lombok是注释处理器(如果需要的话,是编译器插件)。在编译时,每次在代码中找到一组特定的批注时都会调用它,并有机会生成新的源代码或引发编译器错误。如果在编译回合中产生了新的内容,则必须进行另一件事,直到所有内容都被成功编译为止。因此,是的,找到注释,根据需要对其进行处理(请参见下文)并运行额外的编译回合需要花费时间。

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

我认为,这是一项重大技术风险。最后,Lombok不会执行您的IDE无法做的任何事情-生成访问器等,但是可能危及您的整个项目-如果您升级编译器而Lombok不支持它,或者引入了bug,该怎么办?您最终得到的是非编译代码(或者,您的情况是非常缓慢的编译),仅是隐藏了一些无害的样板方法,只不过在代码中占了几行。但那只是我的个人意见 :)

因此,回到您的问题,除了完全删除Lombok,我看不到如何获得更好的编译时间。

  • 对我来说听起来不错,但我也看到了 Lombok 的优势。以 Entitybeans 为例 - 我添加了一个新字段,getter 和 setter 是由 lombok 创建的。如果我使用这些注释,概述就会好得多。我看得很快,哪个领域有 getter 和 setter……所以如果能够加快速度那就太好了。否则,在删除整个 Lombok 代码(需要大量重做工作)之前,我需要进行一些验证,以确定此问题是否更频繁地发生。 (2认同)