
本文详解 Lombok 在 JDK 17 及更高版本中因 Java 模块系统限制(无法访问 jdk.compiler 内部类)引发的 IllegalAccessError,提供升级 Lombok、降级 JDK 或配置 JVM 参数三种可靠解决路径。
本文详解 lombok 在 jdk 17 及更高版本中因 java 模块系统限制(无法访问 `jdk.compiler` 内部类)引发的 `illegalaccesserror`,提供升级 lombok、降级 jdk 或配置 jvm 参数三种可靠解决路径。
该错误本质源于 Java 9 引入的模块化系统(JPMS)对内部 API 的严格封装。自 JDK 17 起,com.sun.tools.javac.processing.JavacProcessingEnvironment 等编译器内部类被彻底移出公开模块导出范围,而旧版 Lombok(如 ≤1.18.20)仍尝试通过反射直接访问该类,触发 java.lang.IllegalAccessError,典型报错如下:
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
✅ 推荐解决方案(按优先级排序)
1. 升级 Lombok 至兼容 JDK 17+ 的版本(首选)
Lombok 自 v1.18.22 起已重构注解处理器逻辑,完全避免访问受限的 JavacProcessingEnvironment,转而使用标准 JSR 269 API。请确保 pom.xml 中使用最新稳定版:
<dependency><groupid>org.projectlombok</groupid><artifactid>lombok</artifactid><version>1.18.32</version><!-- 推荐使用最新版 --><scope>provided</scope></dependency>
同时确认 maven-compiler-plugin 配置启用注解处理(Lombok 1.18.22+ 默认兼容):
<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.32</version></path></annotationprocessorpaths></configuration></plugin>
⚠️ 注意:仅声明
不足以启用注解处理;Maven 编译阶段需显式注册 annotationProcessorPaths,尤其在多模块或非默认配置项目中。
2. 临时降级 JDK(开发调试用,不推荐长期使用)
若无法立即升级 Lombok,可将 Maven 构建环境切换至 JDK 8–16(如 JDK 11),因其模块导出策略较宽松。执行前验证当前 JDK:
mvn -v # 查看 Maven 使用的 JDK 版本
然后通过以下任一方式指定 JDK:
- 设置 JAVA_HOME 指向 JDK 11;
- 在 pom.xml 中配置 maven-toolchain-plugin;
- 或在 CI/CD 中显式指定 JDK 运行时。
3. (不推荐)添加 JVM 参数绕过模块检查(仅限测试)
通过 --add-opens 强制开放模块访问(违反模块封装原则,存在安全与兼容性风险):
mvn clean install -DskipTests \ -Dmaven.compiler.release=17 \ -Dmaven.compiler.source=17 \ -Dmaven.compiler.target=17 \ -DjvmArgs="--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED"
或在 maven-compiler-plugin 中配置:
<configuration><fork>true</fork><compilerargs><arg>--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg></compilerargs></configuration>
✅ 总结建议:
- 生产环境务必升级 Lombok 至 ≥1.18.22 并配合 annotationProcessorPaths 显式配置;
- 避免依赖 --add-opens,它掩盖问题且可能在后续 JDK 版本中失效;
- 定期检查 Lombok 官方 Changelog 以获取模块兼容性更新。
正确配置后,mvn clean install -DskipTests 将不再报错,Lombok 注解(如 @Data, @Builder)可正常生成代码。











