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

使用shadowJar打包Kotlin项目时遇Jackson-Core Java21版本兼容错误

解决shadowJar打包时Jackson 2.16.1的Java 21类文件兼容问题(Java 17环境)

核心问题回顾

shadowJar 8.1.1依赖的ASM版本(9.5)不支持Java 21编译的类文件(major version 65),而jackson-core-2.16.1中包含这类文件,导致打包时抛出org.gradle.api.GradleException: Could not add zip entry错误。以下是针对Java 17环境的可行解决方案:

方案1:升级shadowJar插件到支持ASM 9.6+的版本

ASM 9.6及以上版本已支持Java 21类文件,shadowJar从8.2.0版本开始将ASM依赖升级到9.6。直接升级插件即可解决问题:

plugins {
    kotlin("jvm") version "1.9.20" // 保持你项目的Kotlin版本
    id("com.github.johnrengelman.shadow") version "8.2.0" // 升级到兼容版本
}

方案2:强制替换shadowJar依赖的ASM版本(不升级插件)

如果无法升级shadowJar插件,可以在构建脚本中强制将ASM版本替换为9.6+,确保插件使用支持Java 21的ASM版本:

buildscript {
    configurations.all {
        resolutionStrategy.eachDependency {
            // 强制替换所有ASM相关依赖为9.6版本
            if (requested.group == "org.ow2.asm") {
                useVersion("9.6")
                because("需要支持Java 21编译的类文件")
            }
        }
    }
}

执行以下命令验证ASM版本是否生效:

./gradlew dependencies --configuration buildscriptClasspath | grep asm

方案3:排除jackson-core中的Java 21类文件(兜底方案,不推荐)

如果前两种方案都无法实施,可以尝试排除jackson-core中Java 21编译的类文件,但需确认这些类不会被项目使用(风险较高):

tasks.shadowJar {
    // 示例:排除jackson-core中Java21编译的类路径,需根据实际情况调整
    exclude("com/fasterxml/jackson/core/tsm/*")
    // 保留你的原有包重定位配置
    relocate("com.fasterxml.jackson", "your.custom.package.shaded.jackson")
}

优先级建议

优先选择方案1,升级插件能获得官方的兼容性修复和最新特性;方案2适合受限于插件版本的场景;方案3仅作为最后兜底手段,需充分测试排除后的功能完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:57:01