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

Java 21下使用Apache Avro SpecificCompilerTool生成类的依赖问题

解决方案

1. 强制统一commons-compress版本

Gradle依赖解析可能存在版本冲突,Avro自带的commons-compress版本大概率与Java21不兼容,直接强制指定兼容Java21的高版本(如1.26.0):

configurations.all {
    resolutionStrategy.force 'org.apache.commons:commons-compress:1.26.0'
}

2. 升级Avro并排除冲突依赖

Avro 1.12.x及以上版本原生支持Java21,升级到该版本并排除Avro自带的commons-compress依赖,彻底避免版本冲突:

dependencies {
    // 用于编译生成的Avro类
    implementation('org.apache.avro:avro:1.12.0') {
        exclude group: 'org.apache.commons', module: 'commons-compress'
    }
    // 用于运行SpecificCompilerTool的工具依赖
    implementation('org.apache.avro:avro-tools:1.12.0') {
        exclude group: 'org.apache.commons', module: 'commons-compress'
    }
    // 手动添加兼容Java21的commons-compress版本
    implementation 'org.apache.commons:commons-compress:1.26.0'
}

3. 确保自定义生成任务的ClassPath正确

如果是通过自定义Gradle任务执行SpecificCompilerTool,必须保证任务的classpath包含所有必要依赖:

task generateAvroClasses(type: JavaExec) {
    mainClass = 'com.yourpackage.YourSpecificCompilerToolImpl'
    // 绑定到主源码集的运行时classpath,确保依赖都能被加载
    classpath = sourceSets.main.runtimeClasspath
    // 根据你的需求传递参数,比如schema目录、输出目录
    args = ['src/main/resources/avro', 'src/main/java']
}

// 让编译Java代码前先执行Avro类生成任务
compileJava.dependsOn generateAvroClasses

4. 彻底清理并重新构建

执行以下命令清空缓存并重新构建,确保依赖配置完全生效:

./gradlew clean build --refresh-dependencies

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:32:41