Spring Boot 3.1.3 中的 OpenTelemetry 版本与 Hyperledger Fabric Gateway Java 2.2.8(使用 gradle)存在冲突

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

我需要将 OpenTelemetry 包含在 Spring Boot 3.1.3 项目中,因为 Hyperledger Fabric Gateway 2.2.8 需要它 看起来我在 OpenTelemetry 1.29.0 和 1.25.0 之间出现版本冲突,如“gradle -q dependency”命令所示:

|    |    +--- 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'

我在构建项目时最终遇到了这个冲突:

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')

知道如何解决这个问题吗?

spring-boot hyperledger-fabric open-telemetry hyperledger-fabric-sdk-java
1个回答
0
投票

假设您在项目中使用

io.spring.dependency-management
插件,Spring Boot 将自动应用其依赖管理。此依赖项管理涵盖从
opentelemetry-bom
版本 1.25.0 开始的 Open Telemetry。通过为部分但不是全部 OpenTelemetry 依赖项指定版本,您将覆盖部分但不是全部 Spring Boot 的依赖项管理。这会让您的项目出现不兼容的版本混合。

在第一个实例中,我会尝试从所有 OpenTelemetry 依赖项中删除版本,而依赖于 Spring Boot 的依赖项管理。这应该确保所有 OpenTelemetry 依赖项与您正在使用的 Spring Boot 版本兼容。

如果删除版本不起作用并且您需要使用 OpenTelemetry 1.29.0,您可以覆盖

build.gradle
中的 OpenTelemetry 版本:

ext {
    set("opentelemetry.version", "1.29.0")
}

不幸的是,这并不能保证有效,因为 OpenTelemetry 在 1.25 和 1.29 之间可能发生了重大变化,使其与 Spring Boot 3.1 不兼容。你必须尝试一下才能看到。

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