执行Spring Boot 3.2迁移Recipe时遇Lombok Java16相关报错求助
操作不当是核心诱因
Spring Boot 3.x官方明确要求最低Java版本为17,你直接在Java11环境下运行「Migrate to Spring Boot 3.2」Recipe,本身就不符合迁移的前置环境要求,这是操作上的问题。
报错的具体原因
你使用的Lombok 1.18.16版本偏旧,在Java11环境下,当OpenRewrite的迁移Recipe触发Lombok注解处理器工作时,Lombok需要访问jdk.compiler模块内部的com.sun.tools.javac.processing.JavacProcessingEnvironment类,但Java模块系统限制了未命名模块(Lombok处理器所在模块)对该内部类的访问,从而抛出如下错误:
Execution failed for task ':compileJava'.
java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x2fbe1acc) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x2fbe1acc
虽然JEP 396是Java16引入的模块访问控制增强特性,但旧版本Lombok对模块系统的兼容性处理不足,在Java11环境下也可能触发这类权限问题。
是否属于OpenRewrite Bug?
这不是OpenRewrite的Bug。「Migrate to Spring Boot 3.2」Recipe的设计前提是运行在Java17+环境下,官方迁移逻辑也默认用户已满足Java版本要求。你在不满足环境要求的Java11下执行该Recipe,出现兼容性问题是合理的预期外结果。
标准解决流程
- 先执行「Migrate to Java17」Recipe:该Recipe会自动将Lombok升级到兼容Java17的版本(如1.18.24及以上),同时完成项目的Java版本升级,解决Lombok的模块访问权限问题。
- 再执行「Migrate to Spring Boot 3.2」Recipe:此时环境满足Spring Boot3.x的要求,迁移可顺利完成。
内容的提问来源于stack exchange,提问作者Victoriia

