【问题标题】:Lombok slowing down build process in large projectLombok 在大型项目中减慢了构建过程
【发布时间】:2013-03-09 05:51:13
【问题描述】:

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

有什么让它更快的想法吗?

【问题讨论】:

  • 它使用什么构建系统(如 antmaven),或者它有自己不同的构建系统?无论如何,如果可以选择,对于任何编程工作:添加更多内存和更强大的 CPU,切换到 SSD...编译时的内存使用情况是多少(在 Windows 中使用任务管理器,性能选项卡),有多少空闲?
  • 我们使用 Ant 进行发布,但在 Rational 中构建过程确实很慢。我们已经使用了高速 SSD、8GB 内存和 3.3GHz 的 Core i5 CPU - 这应该足够了。内存使用量约为 4GB,4GB 可用。仅 Rational 就需要大约 1GB。 CPU 负载为 60-70%。
  • 好吧,听起来系统资源不是问题。我会寻找使构建更加并行的方法,但我对 antrad 都不熟悉,所以不知道他们是否支持。
  • 完全披露:我是 Lombok 项目的开发人员之一。我们自己还没有看到这种放缓。另外,你说慢2-3倍。我们在谈论什么绝对数字? Lombok 实际上必须处理所有文件,无论是否实际使用 Lombok。我很好奇时间是花在实际转换上,还是花在访问所有文件上。但我们目前没有基础设施来衡量这一点。
  • Lombok 团队刚刚创建了一个边缘版本,其中包含 Eclipse 的多项性能改进。您可以在projectlombok.org/download-edge.html 找到此版本,欢迎所有反馈。问题请回复code.google.com/p/projectlombok/issues/detail?id=464

标签: java performance build lombok ibm-rad


【解决方案1】:

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

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

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

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

【讨论】:

  • 对我来说听起来不错,但我也看到了 Lombok 的优势。以Entitybeans为例——我添加了一个新字段,getter和setter都是由lombok创建的。如果我使用这些注释,概述会更好。我看到非常快,对于哪个领域有 getter 和 setter ......所以如果有可能加快这将是很棒的。否则,如果这个问题更频繁地发生,我需要进行一些验证,然后再删除整个 Lombok-Code(它有很多重做工作)。
  • 我同意源代码在没有访问器的情况下更清晰,但是有一些简单的方法可以组织您的代码,将它们放在源文件的一个角落,并且不再查看它们:一行of === 可以是一个简单但有效的部分分隔符。此外,在 Eclipse 中,您可以将 @category doclet 放在您的访问器上,然后在大纲视图中将它们过滤掉:参见 thecodersbreakfast.net/index.php?post/2010/03/05/…(法语,但可以使用 Google Translator 小部件)
  • 感谢您的帮助。我等待下一个版本,然后再试一次。问题见code.google.com/p/projectlombok/issues/detail?id=464
【解决方案2】:

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

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

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

【讨论】:

  • 现在稳定的版本似乎工作得更好。请记住,您不仅需要更新引用的库(例如,如果您使用 maven,则在 pom.xml 中),还需要在 eclipse 中使用“java -jar lombok.jar”重新安装它
  • 现在呢?最新的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
相关资源
最近更新 更多