
本文详解 lombok 在 jdk 17 及更高版本中因 java 模块系统(jpms)拒绝访问内部 api(如 com.sun.tools.javac.processing.javacprocessingenvironment)而报错的根源与两种可靠解决路径:升级 lombok 至兼容版本,或降级构建环境 jdk 版本。
本文详解 lombok 在 jdk 17 及更高版本中因 java 模块系统(jpms)拒绝访问内部 api(如 com.sun.tools.javac.processing.javacprocessingenvironment)而报错的根源与两种可靠解决路径:升级 lombok 至兼容版本,或降级构建环境 jdk 版本。
该错误本质源于 Java 9 引入的模块化系统(JPMS)在 JDK 17+ 中进一步收紧了对内部 JDK 类的反射与直接访问限制。Lombok 旧版本(如 ≤1.18.22)依赖 com.sun.tools.javac.* 包中的非公开类实现注解处理,而 jdk.compiler 模块默认不再向 unnamed module(即传统 classpath 加载的 Lombok)导出 com.sun.tools.javac.processing 包,从而触发 IllegalAccessError。
✅ 推荐方案一:升级 Lombok 至 1.18.30 或更高版本
自 Lombok 1.18.30 起(发布于 2023 年底),官方已重构注解处理器逻辑,完全移除了对 JavacProcessingEnvironment 等受限内部类的直接引用,转而采用标准 JSR 269 API 和更健壮的编译器适配层。这是最安全、可持续的解决方案。
Maven 配置示例(pom.xml):
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version> <!-- 建议使用最新稳定版 -->
<scope>provided</scope>
</dependency>⚠️ 注意:确保 lombok 仅声明为 provided 作用域,且 不要 将其打包进最终 JAR;同时确认 IDE(如 IntelliJ IDEA)已安装并启用最新版 Lombok 插件,并重启以同步配置。
✅ 方案二:临时降级 Maven 构建 JDK 至 JDK 8–16(不推荐长期使用)
若因历史项目约束无法立即升级 Lombok,可强制 Maven 使用兼容 JDK(如 JDK 11 或 JDK 17 之前版本)。需注意:此方案绕过模块限制,但牺牲了新语言特性与安全性更新。
步骤如下:
-
检查当前 Maven 使用的 JDK:
mvn -v
-
修改 ~/.m2/settings.xml 或项目级 mvn 启动脚本,指定 JDK 路径;或通过环境变量切换:
export JAVA_HOME=/path/to/jdk-11.0.20 mvn clean install -DskipTests
-
(可选)在 pom.xml 中显式声明 Java 版本兼容性(不影响模块访问,但增强可读性):
<properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties>
? 总结与最佳实践
- 优先选择升级 Lombok:1.18.30+ 已全面适配 JDK 17–21,支持 --add-opens 参数自动注入(无需手动配置 JVM 参数),且修复了多模块项目中的处理器注册问题。
- 避免使用 --add-opens 临时绕过:虽然 --add-opens jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED 可能“暂时”生效,但该方式违反 JPMS 设计原则,易在后续 JDK 升级中失效,且存在安全审计风险。
- IDE 同步至关重要:IntelliJ 用户请进入 Settings → Build → Compiler → Annotation Processors,勾选 Enable annotation processing,并确认 Lombok 插件版本 ≥ 1.18.30;Eclipse 用户需安装最新版 Lombok-installer 并重启。
遵循上述任一方案,即可彻底消除 LombokProcessor can't access com.sun.tools.javac.processing.JavacProcessingEnvironment 错误,保障现代 JDK 环境下的稳定构建与开发体验。

















