
本文详解 Lombok 在 JDK 17 及更高版本中因 Java 模块系统(JPMS)禁止访问内部 API(如 com.sun.tools.javac.processing)而报错的根因与两种可靠解决路径:升级 Lombok 至兼容版本或降级 JDK 版本。
本文详解 lombok 在 jdk 17 及更高版本中因 java 模块系统(jpms)禁止访问内部 api(如 `com.sun.tools.javac.processing`)而报错的根因与两种可靠解决路径:升级 lombok 至兼容版本或降级 jdk 版本。
该错误本质源于 Java 9 引入的模块化系统(JPMS)在 JDK 17+ 中进一步收紧了对内部 JDK 类(如 com.sun.tools.javac.*)的封装策略。lombok.javac.apt.LombokProcessor 原先依赖的 JavacProcessingEnvironment 类已被 jdk.compiler 模块设为非导出(non-exported),而旧版 Lombok(如 ≤1.18.20)仍尝试通过反射或直接引用访问该类,导致 IllegalAccessError:
class lombok.javac.apt.LombokProcessor cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment because module jdk.compiler does not export com.sun.tools.javac.processing
✅ 推荐方案一:升级 Lombok 至 1.18.30 或更高版本
自 Lombok 1.18.30 起(发布于 2023 年 10 月),官方已彻底重构注解处理器逻辑,完全移除对 com.sun.tools.javac.processing.JavacProcessingEnvironment 的直接依赖,转而使用标准 JSR 269 API 和更安全的编译器抽象层。升级方式如下:
<!-- pom.xml --> <dependency><groupid>org.projectlombok</groupid><artifactid>lombok</artifactid><version>1.18.34</version><!-- 推荐使用最新稳定版 --><scope>provided</scope></dependency>
同时确保启用 annotation processing(Maven 默认开启,但建议显式确认):
<plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-compiler-plugin</artifactid><version>3.13.0</version><configuration><source>17</source><target>17</target><annotationprocessorpaths><path><groupid>org.projectlombok</groupid><artifactid>lombok</artifactid><version>1.18.34</version></path></annotationprocessorpaths></configuration></plugin>
⚠️ 注意:若项目使用 IDE(如 IntelliJ IDEA),需同步更新 Lombok 插件并重启,否则编辑器内仍可能提示错误。
✅ 备选方案二:临时降级 JDK 版本(仅限开发/测试环境)
若因历史原因无法立即升级 Lombok,可将 Maven 构建环境切换至 JDK 8–11(这些版本尚未强制模块隔离,允许访问 com.sun 包)。执行前确认当前 JDK:
mvn -v # 查看 Maven 使用的 JDK 路径
然后通过以下任一方式指定 JDK:
- 设置 JAVA_HOME 指向 JDK 11;
- 或在 pom.xml 中配置 maven-compiler-plugin 的 fork + executable;
- 或使用 SDKMAN! / jenv 切换全局 JDK。
❌ 不推荐长期使用 JDK 8/11,因其已停止 LTS 支持(JDK 8 EOL)、缺乏现代语言特性及安全更新。
? 额外建议
- 避免添加 --add-opens JVM 参数(如 --add-opens jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED)作为“修复”——这属于绕过模块安全机制的临时 hack,违反 JPMS 设计原则,且在后续 JDK 版本中可能失效;
- 若使用 Spring Boot,注意其 BOM 可能锁定旧版 Lombok,需显式 override 依赖版本;
- 构建成功后,可通过 javap -cp target/classes YourClass.class 验证 Lombok 生成的字节码(如 getter/setter)是否正常生效。
综上,升级 Lombok 是唯一符合 Java 长期演进规范、安全且可持续的解决方案。请优先采用 1.18.30+ 版本,并同步更新 IDE 插件与构建配置。











