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

Spring Boot 3.1.3与Fabric Gateway 2.2.8的OpenTelemetry版本冲突(Gradle)

解决OpenTelemetry版本冲突导致的IllegalAccessError问题

问题详情

环境与冲突现象

在Spring Boot 3.1.3项目中引入Hyperledger Fabric Gateway 2.2.8所需的OpenTelemetry时,通过gradle -q dependencies检测到存在1.29.0与1.25.0的版本冲突,部分组件被强制回退到1.25.0,最终构建时抛出以下错误:

java.lang.IllegalAccessError: class io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder tried to access method 'void io.opentelemetry.exporter.internal.grpc.GrpcExporterBuilder.<init>(java.lang.String, java.lang.String, long, java.net.URI, java.util.function.Supplier, java.lang.String)' (io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder and io.opentelemetry.exporter.internal.grpc.GrpcExporterBuilder are in unnamed module of loader 'app')

依赖树片段

|    |    +--- io.opentelemetry:opentelemetry-api:1.29.0 -> 1.25.0
|    |    |    \--- io.opentelemetry:opentelemetry-context:1.25.0
|    |    +--- io.opentelemetry:opentelemetry-sdk:1.29.0 -> 1.25.0
|    |    |    +--- io.opentelemetry:opentelemetry-api:1.25.0 (*)
|    |    |    +--- io.opentelemetry:opentelemetry-sdk-common:1.25.0
|    |    |    |    \--- io.opentelemetry:opentelemetry-api:1.25.0 (*)
|    |    |    +--- io.opentelemetry:opentelemetry-sdk-trace:1.25.0
|    |    |    |    +--- io.opentelemetry:opentelemetry-api:1.25.0 (*)
|    |    |    |    \--- io.opentelemetry:opentelemetry-sdk-common:1.25.0 (*)
|    |    |    \--- io.opentelemetry:opentelemetry-sdk-metrics:1.25.0 -> 1.29.0
|    |    |         +--- io.opentelemetry:opentelemetry-api:1.29.0 -> 1.25.0 (*)
|    |    |         \--- io.opentelemetry:opentelemetry-sdk-common:1.29.0 -> 1.25.0 (*)
|    |    +--- io.opentelemetry:opentelemetry-sdk-trace:1.29.0 -> 1.25.0 (*)
|    |    +--- io.opentelemetry:opentelemetry-exporter-otlp:1.29.0
|    |    |    +--- io.opentelemetry:opentelemetry-sdk-trace:1.29.0 -> 1.25.0 (*)
|    |    |    +--- io.opentelemetry:opentelemetry-sdk-metrics:1.29.0 (*)
|    |    |    \--- io.opentelemetry:opentelemetry-sdk-logs:1.29.0
|    |    |         +--- io.opentelemetry:opentelemetry-api:1.29.0 -> 1.25.0 (*)
|    |    |         \--- io.opentelemetry:opentelemetry-sdk-common:1.29.0 -> 1.25.0 (*)
|    |    +--- io.opentelemetry:opentelemetry-extension-trace-propagators:1.29.0 -> 1.25.0
|    |    |    \--- io.opentelemetry:opentelemetry-api:1.25.0 (*)
|    |    +--- io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.29.0
|    |    |    +--- io.opentelemetry:opentelemetry-sdk:1.29.0 -> 1.25.0 (*)
|    |    |    \--- io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.29.0 -> 1.25.0
|    |    |         \--- io.opentelemetry:opentelemetry-sdk:1.25.0 (*)
|    |    +--- io.opentelemetry.instrumentation:opentelemetry-grpc-1.6:1.29.0-alpha
|    |    |    +--- io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:1.29.0
|    |    |    |    \--- io.opentelemetry:opentelemetry-api:1.29.0 -> 1.25.0 (*)
|    |    |    +--- io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-semconv:1.29.0-alpha
|    |    |    |    +--- io.opentelemetry:opentelemetry-semconv:1.29.0-alpha
|    |    |    |    |    \--- io.opentelemetry:opentelemetry-api:1.29.0 -> 1.25.0 (*)
|    |    |    |    \--- io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:1.29.0 (*)
|    |    |    \--- io.opentelemetry:opentelemetry-api:1.29.0 -> 1.25.0 (*)
|    |    \--- io.opentelemetry.proto:opentelemetry-proto:1.0.0-alpha
|    |         \--- com.google.protobuf:protobuf-java:3.23.4

原build.gradle依赖配置

//  implementation(platform("io.opentelemetry:opentelemetry-bom:1.25.0"))
//  implementation platform('io.opentelemetry:opentelemetry-bom-alpha:1.25.0-alpha')
    implementation("io.opentelemetry:opentelemetry-api")
    implementation('io.opentelemetry:opentelemetry-semconv')
    implementation('io.opentelemetry:opentelemetry-sdk-extension-autoconfigure')
    implementation 'io.opentelemetry:opentelemetry-api-logs:1.25.0-alpha'
    implementation 'io.opentelemetry:opentelemetry-sdk-metrics:1.29.0'
//  implementation 'io.opentelemetry:opentelemetry-exporters-otlp:0.9.1'
    implementation 'io.opentelemetry:opentelemetry-exporter-otlp:1.29.0'
    runtimeOnly 'io.opentelemetry:opentelemetry-exporter-otlp-common:1.29.0'

解决方案

1. 启用OpenTelemetry BOM统一版本管理

OpenTelemetry组件内部API耦合度高,版本必须完全一致。取消注释BOM配置,并统一使用1.29.0版本的BOM(覆盖所有组件版本):

implementation(platform("io.opentelemetry:opentelemetry-bom:1.29.0"))
implementation(platform("io.opentelemetry:opentelemetry-bom-alpha:1.29.0-alpha"))

2. 移除依赖中的硬编码版本号

将所有指定了具体版本的OpenTelemetry依赖改为无版本声明,由BOM自动管控版本:

implementation("io.opentelemetry:opentelemetry-api")
implementation("io.opentelemetry:opentelemetry-semconv")
implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
implementation("io.opentelemetry:opentelemetry-api-logs")
implementation("io.opentelemetry:opentelemetry-sdk-metrics")
implementation("io.opentelemetry:opentelemetry-exporter-otlp")
runtimeOnly("io.opentelemetry:opentelemetry-exporter-otlp-common")

3. 强制对齐冲突依赖(可选)

如果执行gradle -q dependencies后仍存在版本回退,添加强制版本规则确保所有OpenTelemetry组件版本统一:

configurations.all {
    resolutionStrategy {
        force "io.opentelemetry:opentelemetry-api:1.29.0"
        force "io.opentelemetry:opentelemetry-sdk:1.29.0"
        force "io.opentelemetry:opentelemetry-exporter-internal-grpc:1.29.0"
    }
}

4. 验证修复效果

执行以下命令确认所有OpenTelemetry组件版本已统一:

gradle -q dependencies | grep io.opentelemetry

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:19:52