有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

maven编译Java单元测试的速度非常慢

我正在开发一个新的多模块Maven项目(Java11+),当我们在项目中添加越来越多的单元测试时,我注意到编译测试变得非常慢。所以我开始分析这个项目,下面是编译一个典型模块的结果:

  • “测试编译”花了109s处理了18个文件
  • “编译”(非测试类)花了4个小时处理76个文件

我已经用Java11(OpenJDK)在我的Windows笔记本上运行了它,但可以用Java17和OracleJDK以及Linux机器复制它。我不知道是什么导致了这种巨大的差异(每个文件0.05秒,每个文件6秒)。我们主要使用Spring Boot,在测试中,我们使用Junit5和Spring Boot starter test、Mockito和AssertJ

下面是一个使用maven配置的最小复制器: https://github.com/elbird/slow-test-compile


共 (1) 个答案

  1. # 1 楼答案

    经过反复试验,我找到了罪魁祸首:龙目山。 我无法解释为什么,但在我的复制程序https://github.com/elbird/slow-test-compile中,我发现lombok至少在版本1.18.20(及更低版本)中使用Java11+编译时速度非常慢。(尤其是像assertjs assertThat()这样的重载方法)

    幸运的是,lombok 1.18.22似乎解决了这个问题。修复程序似乎与此错误有关:https://github.com/projectlombok/lombok/issues/2652,该错误已通过以下changelog条目修复:

    IMPROBABLE BREAKING CHANGE: If the underlying compiler and release / source option is 10 or higher, lombok's val is now replaced by final var.

    https://projectlombok.org/changelog

    TLDR:更新到lombok 1.18.22修复了该问题