You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle构建shadowJar遇Unsupported class file major version 63问题排查

问题分析

环境配置

Gradle版本信息

> ./gradlew --version
------------------------------------------------------------
Gradle 6.1.1
------------------------------------------------------------
Kotlin:       1.3.61
Groovy:       2.5.8
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          11.0.18

Shadow插件配置(build.gradle中)

dependencies {
    // ...
    classpath "com.github.jengelman.gradle.plugins:shadow:6.1.0"
    // ...
}

问题现象

根据Shadow插件兼容性表,Gradle 6.1.1、Shadow 6.1.0与Java 11应当兼容,但执行./gradlew build shadowJar时抛出错误:

2023-08-03T14:54:20.719-0700 [ERROR] [com.github.jengelman.gradle.plugins.shadow.tasks.ShadowCopyAction] ex
java.lang.IllegalArgumentException: Unsupported class file major version 63

已知版本63对应Java 19,但本地./gradlew与java --version均显示使用Java 11.0.18。

错误来源分析

出现该错误的核心原因是构建过程中存在Java 19编译的类文件,而当前运行Shadow插件的Java 11环境无法识别该版本类文件,具体场景包括:

  1. 项目残留旧编译产物
    之前可能用Java 19构建过项目,build目录下残留了高版本编译的.class文件。Gradle增量构建机制未清理这些文件,导致Shadow插件处理时读取到不兼容的类文件。

  2. 第三方依赖使用Java 19编译
    项目引入的依赖库中,存在用Java 19编译的包。这类库的class文件版本为63,Java 11的JVM无法解析该格式。

  3. Gradle实际运行JVM与显示版本不一致

    • 检查gradle.properties中的org.gradle.java.home配置,若该路径指向Java 19,即使./gradlew --version显示Java 11,实际编译阶段仍会生成高版本类文件,后续Shadow插件处理时出错。
    • 系统环境变量JAVA_HOME指向Java 19,部分Gradle任务会优先读取该变量,导致编译出高版本类文件,与Shadow插件的运行环境冲突。

排查建议

  • 执行./gradlew clean清理所有构建产物,再重新运行./gradlew build shadowJar,排除旧编译文件残留问题。
  • 检查gradle.properties文件,确认org.gradle.java.home配置指向Java 11的安装路径,修正错误配置。
  • 验证系统环境变量JAVA_HOME,确保其指向Java 11,必要时临时修改后重新执行构建。
  • 排查项目依赖,通过javap -v <类文件> | grep major命令查看依赖类文件的版本,确认是否存在Java 19编译的库,若有则替换为兼容Java 11的版本。

内容的提问来源于stack exchange,提问作者divide_by_zero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:07:38