如何使用 gradle 重新定位现有的 jar 文件?

问题描述 投票:0回答:1

我正在开发一个使用 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 gradle-plugin gradlew
1个回答
0
投票

该错误不是 Gradle 特定的。已编译的代码已使用 Java 21 进行编译,但尝试使用/运行已编译的代码正在使用早期版本的 Java。因此会出现不支持的类文件主要版本错误。

您可以在此处查看 Java 版本及其类文件版本的列表:https://javaalmanac.io/bytecode/versions/

您需要确保您的 Gradle 构建和 Bazel 构建在编译/运行代码时使用相同版本的 Java。对于 Gradle,这可以使用 JVM 项目的工具链来完成。

© www.soinside.com 2019 - 2024. All rights reserved.