如果我在一个项目中使用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)
任何让它更快的想法?
答案 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。