我正在開發一個新的多模塊 Maven 專案(Java11 ),因為我們向專案添加了越來越多的單元測驗,我注意到編譯測驗變得非常慢。因此,我開始分析該專案,以下是編譯典型模塊的結果:
- 18 個檔案的“測驗編譯”耗時 109 秒
- “編譯”(非測驗類)為 76 個檔案花費了 4 秒。
我已經使用 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
uj5u.com熱心網友回復:
經過大量的反復試驗,我找到了罪魁禍首:lombok。我無法解釋為什么,但在我的復制器https://github.com/elbird/slow-test-compile 中,我發現至少在 1.18.20(及更低版本)中的 lombok 在使用 Java11 編譯時確實很慢。(尤其是像 assertjs 這樣的多載方法assertThat())
幸運的是,lombok 1.18.22 這個問題似乎得到了解決。該修復似乎與此錯誤有關:https : //github.com/projectlombok/lombok/issues/2652已通過以下更改日志條目修復:
不可能的重大更改:如果底層編譯器和 --release / --source 選項為 10 或更高,則 lombok 的 val 現在被最終 var 替換。
https://projectlombok.org/changelog
TLDR:更新到 lombok 1.18.22 修復了該問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370991.html
