You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Project Lombok未来的技术疑问:兼容性与注解处理器冲突

关于Project Lombok的技术疑问解答

使用背景与担忧

我一直在使用Project Lombok,它能帮我省去样板代码,使用体验良好,但存在一些担忧:

  • 据相关资料显示,Lombok完全依赖JDK的非公开API,若这些API被关闭,Lombok将无法运行。Lombok开发团队曾与OpenJDK开发团队沟通,希望保留该非公开API,或提供如--add-open、--illegal-access等参数以在API限制后仍能使用。目前v1.18.26版本的Lombok已支持Java 19。
  • 不少人认为若要弃用Lombok,可通过de-lombok轻松过渡,但有文章指出de-lombok的实际体验不佳。

技术问题解答

1. Lombok是否会彻底失效?Java是否尚未关闭这些非公开API?

Lombok短期内不会彻底失效,目前Java并未完全关闭它依赖的非公开API,但确实在逐步收紧对非公开API的访问限制:

  • 从Java 9引入模块系统开始,非公开API的访问就受到--illegal-access参数管控,Java 16起默认行为变为deny,但Lombok团队通过适配--add-open等参数,让v1.18.26及以上版本能在Java 19及后续版本正常运行。
  • Lombok团队长期与OpenJDK团队保持沟通,甚至参与JDK相关提案讨论,尝试推动标准化注解处理器API替代当前依赖的非公开API。只要团队持续跟进JDK版本变化、及时调整实现,就不会轻易彻底失效。
  • 未来JDK完全封死所有非公开API且无替代方案的概率极低——Lombok在Java生态中使用率极高,社区与OpenJDK团队不会完全无视这类需求。

2. 使用其他注解处理器为何会导致Lombok失效?

核心原因在于Lombok的特殊实现逻辑与注解处理器的执行顺序冲突:

  • Lombok并非基于标准JSR 269 API的注解处理器,它依赖直接修改编译器的抽象语法树(AST)生成代码。若其他标准注解处理器先于Lombok执行,可能修改或消费掉Lombok需要处理的注解节点,导致Lombok无法识别目标类、无法生成样板代码。
  • Maven、Gradle等构建工具默认不会严格控制注解处理器的执行顺序,若未显式指定Lombok的执行优先级,就可能出现其他注解处理器抢占执行顺序的情况。
  • 部分注解处理器会对AST做不可逆转的修改,比如标记Lombok注解为已处理、改变类结构,导致Lombok后续无法正常解析和处理目标类。

内容的提问来源于stack exchange,提问作者paratrooper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 12:11:11