JDK编译版本报错

Cause: com/android/tools/idea/gradle/run/OutputBuildAction has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

两种结局方法:

一、修改AS的Gradle版本

File > Setting > Gradle

 Java改为11的版本,修改jdk版本后肯定会有冲突,只能一个个的解决(优点:AS后续可以直接更新,缺点:太慢,而且以后导入老的项目都会有这个问题)

二、AS版本回退

Android Studio 下载文件归档  |  Android 开发者  |  Android Developers

我重装的是4.22的:

 优点就是快,缺点是as不能升级。

 具体的报错原因,这大佬说的很清楚(没VIP看不了(T_T)  ↓↓↓

JDK编译版本与AS需要的运行版本不同

之后肯定会更好的方法: 

 

 

在使用 JDK 17 编译 Lombok 项目时出现的报错,通常与 Lombok 版本和 Java 编译器(javac)版本之间的兼容性问题有关。JDK 9 引入了模块化系统(JPMS),这导致了一些库无法直接访问原本公开的内部 API,而 Lombok 在某些旧版本中依赖了这些 API,从而引发编译错误。 ### 错误分析 - **错误1**:`Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'` 此错误表明 Lombok 的注解处理器尝试访问 `javac` 内部类结构时失败,可能是因为所使用的 Lombok 版本不支持当前 JDK 的编译器结构。 - **错误2**:`class lombok.javac.apt.LombokProcessor cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module` 这个问题是由于 JDK 17 模块系统的限制导致的,Lombok 需要访问 `jdk.compiler` 模块中的内部类,但默认情况下该模块并不对未命名模块开放访问权限[^1]。 ### 解决方案 #### 升级 Lombok 到最新版本 确保使用的是 Lombok 最新版本(如 1.18.30 或更高),因为这些版本已经修复了对高版本 JDK 的兼容性问题。 对于 Maven 项目,在 `pom.xml` 中添加以下依赖: ```xml <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> </dependency> ``` 对于 Gradle 项目,添加如下配置: ```groovy compileOnly 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30' ``` #### IDEA 插件优先级调整 IDEA 自带的 Lombok 插件可能会与项目中引入的 Lombok 依赖发生冲突,导致注解处理异常。可以通过禁用或调整插件加载顺序来解决此问题。 进入 IDEA 设置 -> Plugins,确保已安装最新版本的 Lombok 插件,并检查其加载顺序是否与项目中的注解处理器兼容[^3]。 #### 添加 JVM 参数以启用访问 为了允许 Lombok 访问 JDK 内部模块,可以在编译时通过添加 JVM 参数来实现: ```bash --add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED ``` 如果使用 Maven,则可以将这些参数配置到 `maven-compiler-plugin` 的 `<compilerArgs>` 中;如果是 Gradle,则将其加入 `javacOptions`。 #### 示例代码:Maven 配置示例 ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <compilerArgs> <arg>--add-exports</arg> <arg>jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg> <arg>--add-exports</arg> <arg>jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg> <arg>--add-exports</arg> <arg>jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin> ``` #### 示例代码:Gradle 配置示例 ```groovy tasks.withType(JavaCompile) { options.fork = true options.forkOptions.jvmArgs += [ '--add-exports', 'jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED', '--add-exports', 'jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED', '--add-exports', 'jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED' ] } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值