我正在开发一个使用 java 和 bazel 等的项目。我遇到了一堆依赖冲突,想要遮蔽一个罐子。 Bazel 没有办法做到这一点,所以我使用以前从未使用过的 Gradle。使用 chatGPT 这是我目前拥有的脚本:
plugins {
id("java")
id("com.github.johnrengelman.shadow") version "8.1.1"
}
repositories {
mavenCentral()
maven {
url = uri("https://mvnrepository.com/artifact")
}
}
dependencies {
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.0'
}
tasks.named('shadowJar', com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
relocate 'com.fasterxml.jackson', 'shaded.com.fasterxml.jackson'
}
Gradle 版本为 8.10.2。我收到的错误是这样的:
java.lang.IllegalArgumentException: Unsupported class file major version 65
at org.objectweb.asm.ClassReader.<init>(ClassReader.java:199)
at org.objectweb.asm.ClassReader.<init>(ClassReader.java:180)
at org.objectweb.asm.ClassReader.<init>(ClassReader.java:166)
at org.objectweb.asm.ClassReader.<init>(ClassReader.java:287)
在 Google 和 ChatGPT 之间,我尝试了很多方法,但没有任何效果,ChatGPT 开始给出已经尝试过的相同建议。
该错误不是 Gradle 特定的。已编译的代码已使用 Java 21 进行编译,但尝试使用/运行已编译的代码正在使用早期版本的 Java。因此会出现不支持的类文件主要版本错误。
您可以在此处查看 Java 版本及其类文件版本的列表:https://javaalmanac.io/bytecode/versions/
您需要确保您的 Gradle 构建和 Bazel 构建在编译/运行代码时使用相同版本的 Java。对于 Gradle,这可以使用 JVM 项目的工具链来完成。