
本文详解 Lombok 在 JDK 17 及更高版本中因 Java 模块系统限制(jdk.compiler 未导出内部类)引发的 IllegalAccessError 错误,并提供兼容性升级与降级两种可靠解决路径。
本文详解 lombok 在 jdk 17 及更高版本中因 java 模块系统限制(`jdk.compiler` 未导出内部类)引发的 `illegalaccesserror` 错误,并提供兼容性升级与降级两种可靠解决路径。
当使用 Maven 执行 mvn clean install -DskipTests 时,若出现如下错误:
class lombok.javac.apt.LombokProcessor (in unnamed module @0x7e7740a5) 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 @0x7e7740a5
该问题本质是 JDK 9 引入的模块系统(JPMS)在 JDK 17+ 中进一步收紧了对内部 API 的访问控制。com.sun.tools.javac.processing.JavacProcessingEnvironment 属于 jdk.compiler 模块的非公开内部实现,自 JDK 16 起默认不再向未命名模块(如 Lombok 的传统 jar)开放。而旧版 Lombok(≤1.18.20)仍尝试直接反射访问该类,从而触发 IllegalAccessError。
✅ 推荐方案:升级 Lombok 至兼容高版本 JDK 的稳定版
Lombok 自 v1.18.22 起已完全适配 JDK 17+,弃用对 JavacProcessingEnvironment 的直接访问,转而采用标准 JSR 269 SPI 接口与安全的编译器 API 交互。请确保 pom.xml 中使用最新稳定版:
<dependency><groupid>org.projectlombok</groupid><artifactid>lombok</artifactid><version>1.18.34</version><!-- 建议使用当前最新版 --><scope>provided</scope></dependency>
同时,务必启用 annotation processor 配置(尤其在 Maven 3.8.1+ 中默认禁用):
<plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-compiler-plugin</artifactid><version>3.11.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>
⚠️ 注意事项:
- 不要仅靠
true 或 provided 依赖,必须显式声明 annotationProcessorPaths; - 若使用 IDE(如 IntelliJ),需同步启用 “Enable annotation processing” 并配置 Lombok plugin(v2023.3+);
- 清理缓存:执行 mvn clean 后删除 ~/.m2/repository/org/projectlombok/ 下旧版缓存,避免版本冲突。
? 替代方案:临时降级 JDK(仅限开发验证)
若因项目约束无法立即升级 Lombok,可将构建环境切换至 JDK 8 或 JDK 11(二者尚未启用严格模块封装):
# 检查当前 JDK 版本 mvn -v # 临时切换(以 SDKMAN! 为例) sdk use java 8.0.392-amzn # 或 sdk use java 11.0.22-open
但此方案不推荐用于生产环境——它规避而非解决根本问题,且阻碍 JDK 安全更新与新特性演进。
? 总结:
该错误是 Java 模块化演进过程中的典型兼容性问题。根本解法是升级 Lombok 并正确配置注解处理器,而非绕行降级 JDK。保持工具链现代化(Lombok ≥1.18.22 + JDK 17+ + Maven Compiler Plugin ≥3.10.1)可兼顾稳定性、安全性与长期可维护性。











