Spring Boot集成OpenTelemetry启动时遇DoubleGauge类找不到异常
Spring Boot Starter OpenTelemetry 2.7.0 启动时缺失DoubleGauge类问题
问题详情
使用Spring Boot Starter OpenTelemetry(版本2.7.0)启动Spring Boot应用时,抛出ClassNotFoundException,提示找不到io.opentelemetry.api.incubator.metrics.DoubleGauge类。
采用Gradle构建,依赖配置包含opentelemetry-spring-boot-starter、opentelemetry-instrumentation-bom,同时引入了micrometer-tracing、micrometer-tracing-bridge-otel以及Spring Boot标准的actuator和web依赖。已尝试移除所有自定义配置恢复默认,但问题仍未解决,且无法定位该类所属依赖库,操作完全遵循OpenTelemetry官方文档。
错误栈
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'autoConfiguredOpenTelemetrySdk' defined in class path resource [io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration$OpenTelemetrySdkConfig.class]: Failed to instantiate [io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk]: Factory method 'autoConfiguredOpenTelemetrySdk' threw exception with message: io/opentelemetry/api/incubator/metrics/DoubleGauge at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648) ~[spring-beans-6.1.11.jar:6.1.11] ... ... 133 common frames omitted Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk]: Factory method 'autoConfiguredOpenTelemetrySdk' threw exception with message: io/opentelemetry/api/incubator/metrics/DoubleGauge at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:178) ~[spring-beans-6.1.11.jar:6.1.11] ... ... 148 common frames omitted Caused by: java.lang.ClassNotFoundException: io.opentelemetry.api.incubator.metrics.DoubleGauge at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na] ... 166 common frames omitted
Gradle配置
settings.toml
spring-boot-starter-opentelemetry = {group = "io.opentelemetry.instrumentation", name = "opentelemetry-spring-boot-starter", version = { ref = "opentelemetry" }} spring-boot-starter-opentelemetry-bom = {group = "io.opentelemetry.instrumentation", name = "opentelemetry-instrumentation-bom", version = { ref = "opentelemetry" }} ... opentelemetry = "2.7.0"
依赖管理配置
plugins { alias(libs.plugins.dependency.management) } plugins.apply(libs.plugins.dependency.management.get().pluginId) dependencyManagement { imports { ... mavenBom(libs.spring.boot.starter.opentelemetry.bom.get().toString()) mavenBom(SpringBootPlugin.BOM_COORDINATES) } dependencies { ... } }
解决方案
- 明确类归属:
io.opentelemetry.api.incubator.metrics.DoubleGauge属于OpenTelemetry API的孵化器模块,对应依赖为io.opentelemetry:opentelemetry-api-incubator。 - 调整BOM导入顺序:当前配置先导入OpenTelemetry BOM再导入Spring Boot BOM,可能引发版本冲突。将Spring Boot BOM放在OpenTelemetry BOM之前导入,确保Spring Boot管理的依赖版本优先级正确:
dependencyManagement { imports { mavenBom(SpringBootPlugin.BOM_COORDINATES) mavenBom(libs.spring.boot.starter.opentelemetry.bom.get().toString()) ... } ... } - 显式添加孵化器依赖:若调整BOM顺序后问题仍存在,直接在依赖中添加
opentelemetry-api-incubator,版本与OpenTelemetry保持一致:implementation "io.opentelemetry:opentelemetry-api-incubator:2.7.0" - 验证依赖一致性:执行
gradle dependencies命令检查依赖树,确保所有OpenTelemetry相关依赖版本统一,不存在不一致的子依赖引入。
内容的提问来源于stack exchange,提问作者JoJo46
相关产品推荐
相关产品推荐

