java: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x29944767) 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 @0x29944767
时间: 2025-03-19 13:02:15 浏览: 362
### Java中因Lombok与JDK编译器模块间访问限制导致的`IllegalAccessError`解决方案
当遇到 `java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor` 错误时,通常是因为 Lombok 的处理器无法访问 JDK 编译器中的某些内部类。这是由于从 JDK 9 开始引入了模块化系统(Project Jigsaw),并严格控制了模块间的可见性和访问权限。
#### 原因分析
错误的根本原因是 Lombok 版本与所使用的 JDK 版本不兼容[^1]。具体来说,在 JDK 9 及更高版本中,`com.sun.tools.javac.processing.JavacProcessingEnvironment` 被封装到 `jdk.compiler` 模块中,并且该模块未导出给无名模块或其他特定模块。因此,如果使用的是较新的 JDK 版本而 Lombok 并未适配,则会出现此问题。
#### 解决方案一:降级至 JDK 8
最简单的解决方法之一是切换回 JDK 8。因为 JDK 8 不受模块化系统的约束,所有的工具类都默认公开可用。通过将项目环境配置为 JDK 8,可以有效规避此类问题。
#### 解决方案二:升级 Lombok 至最新版本
确保正在使用的 Lombok 是最新的稳定版。新版本的 Lombok 已经针对不同 JDK 版本进行了优化和支持。例如,对于 JDK 9 或更新版本,Lombok 提供了一个名为 `-add-opens` 的 JVM 参数来绕过模块化的访问限制[^2]。
可以通过以下方式启动应用程序或构建工具:
```bash
java --add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED -jar your-application.jar
```
上述命令允许指定模块及其包向无名模块开放访问权限,从而解决了非法访问的问题。
#### 解决方案三:调整 Maven/Gradle 配置
如果是基于 Maven 或 Gradle 构建的项目,可以在其配置文件中加入相应的参数支持:
##### 对于 Maven 用户
编辑 `pom.xml` 文件,添加如下插件配置:
```xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<fork>true</fork>
<compilerArgs>
<arg>--add-opens</arg>
<arg>jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
```
##### 对于 Gradle 用户
在 `gradle.properties` 中设置 JVM 启动选项:
```properties
org.gradle.jvmargs=--add-opens jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
```
或者直接修改 `build.gradle` 文件:
```groovy
tasks.withType(JavaCompile) {
options.fork = true
options.forkOptions.executable = 'javac'
doFirst {
options.compilerArgs += ['--add-opens', 'jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED']
}
}
```
以上配置能够帮助开发人员更灵活地处理复杂的依赖关系和运行时需求。
---
### 总结
为了彻底解决问题,建议优先考虑 **升级 Lombok 到最新版本** 和 **适当调整 JDK 运行参数** 来满足现代模块化的要求。只有在确实无法更改现有环境的情况下才推荐退回到旧版 JDK 如 JDK 8。
阅读全文
相关推荐



















