idea較新版本識別不了lombok生成的方法


現象

idea版本:

IntelliJ IDEA 2021.1.1 (Ultimate Edition)
Build #IU-211.7142.45, built on April 30, 2021

lombok版本

1.18.16

編譯的時候報錯:

java: You aren't using a compiler supported by lombok, so lombok will not work and has been disabled.
Your processor is: com.sun.proxy.$Proxy32
Lombok supports: OpenJDK javac, ECJ

新版本idea所使用的的java compilier編譯器,lombok用不來, 得是 javac
所以 @Getter @Setter 等lombok注解就沒法在pre-compile的時候沒法生成對應的方法了

問題排查

lombok的相關issue:https://github.com/projectlombok/lombok/issues/2592

IntelliJ is now wrapping the ProcessingEnvironment in a Proxy. This lead to a problem for us at MapStruct (mapstruct/mapstruct#2215). While trying to fix that and testing with our examples I realized that our examples with Lombok are not compiling anymore.
大致意思是,IntelliJ新版本在 ProcessingEnvironement 預編譯的時候是以代理的方式來執行的,不再是直接 javac方式, 所以 lombok依賴的 javac方式的 annotation processors 不再生效了

解決辦法

IntelliJ的開發人員在這里有回復 https://youtrack.jetbrains.com/issue/IDEA-252069
Intellij使用包裝類是為了收集數據,通過不斷分析這些數據來幫助改進文件編譯的正確性; lombok的這個判斷邏輯有點太死板了 他們得改

在這增加參數: -Djps.track.ap.dependencies=false

就能正常處理 lombok注解了,
同時提示

java: JPS incremental annotation processing is disabled. Compilation results on partial recompilation may be inaccurate.
 Use build process "jps.track.ap.dependencies" VM flag to enable/disable incremental annotation processing environment.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM