e: java.lang.IllegalAccessError: superclass access check failed: class org.jetbrains.kotlin.kapt3.base.javac.KaptJavaCompiler (in unnamed module @0x1bb8299a) cannot access class com.sun.tools.javac.main.JavaCompiler (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.main to unnamed module @0x1bb8299a
时间: 2025-06-01 09:08:30 浏览: 191
### 问题分析
`java.lang.IllegalAccessError` 错误表明某个类尝试访问另一个类或模块时,由于权限限制而失败。具体到此问题中,`org.jetbrains.kotlin.kapt3.base.javac.KaptJavaCompiler` 类试图访问 `com.sun.tools.javac.main.JavaCompiler` 类,但 `jdk.compiler` 模块未导出 `com.sun.tools.javac.main` 包给未命名模块。
这一问题通常与以下因素相关:
- 使用的 JDK 版本较高(如 JDK 9 及以上),引入了模块化系统(Project Jigsaw)。
- 第三方库(如 Lombok 或 Kapt)版本较低,未能正确处理模块化系统的限制。
---
### 解决方案
#### 方法一:升级依赖库版本
确保项目中使用的第三方库(如 Lombok 或 Kotlin 的 Kapt)为最新版本。例如,对于 Lombok,可以更新其 Maven 依赖为最新版本[^4]:
```xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
```
对于 Kotlin 的 Kapt,检查是否使用了兼容的 Kotlin 插件版本。例如,在 `build.gradle` 文件中添加或更新以下内容[^3]:
```gradle
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.9.0'
id 'kotlin-kapt' version '1.9.0'
}
```
#### 方法二:降级 JDK 版本
如果无法升级依赖库版本,可以选择降级 JDK 版本至 8。JDK 8 不包含模块化系统,因此不会出现此类问题[^5]。
在 IDE 中调整 JDK 版本的方法如下:
- 在 IntelliJ IDEA 中,通过 **File > Project Structure > SDKs** 设置合适的 JDK 版本。
- 确保系统环境变量中的 `JAVA_HOME` 指向 JDK 8。
#### 方法三:修改模块化配置
如果必须使用高版本 JDK,可以通过命令行参数允许模块间的访问。例如,运行 Java 程序时添加以下参数:
```bash
--add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
```
在 Maven 或 Gradle 构建工具中,也可以将上述参数添加到编译选项中。例如,在 `pom.xml` 中配置如下[^5]:
```xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<compilerArgs>
<arg>--add-exports</arg>
<arg>jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
```
#### 方法四:排查依赖冲突
有时问题可能由依赖冲突引起。使用以下命令检查项目中是否存在多个版本的 Lombok 或 Kotlin 插件:
```bash
mvn dependency:tree
```
根据输出结果,排除不必要的依赖版本或锁定特定版本。
---
### 示例代码
以下是一个简单的示例,展示如何通过 Maven 配置解决模块化问题:
```xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
<compilerArgs>
<arg>--add-exports</arg>
<arg>jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
</project>
```
---
###
阅读全文
相关推荐



















