dd-trace-ot 1.67.x: NoClassDefFoundError `ddtrot/dd/trace/api/llmobs/LLMObs`
维护者通常 2 天内回复
评估
这个 Issue 还没有评估数据。
描述
Tracer Version(s)
1.67.0+
Java Version(s)
25
JVM Vendor
Oracle JDK
Bug Report
Since 1.67.0, DDTracer.inject(...) from dd-trace-ot throws NoClassDefFoundError for ddtrot/dd/trace/api/llmobs/LLMObs. 1.66.0 is fine. dd-trace-api is on the classpath at the same version as dd-trace-ot.
java.lang.NoClassDefFoundError: ddtrot/dd/trace/api/llmobs/LLMObs
at ddtrot.dd.trace.core.propagation.DatadogHttpCodec$Injector.inject(DatadogHttpCodec.java:86)
at ddtrot.dd.trace.core.propagation.HttpCodec$CompoundInjector.inject(HttpCodec.java:194)
at ddtrot.dd.trace.core.propagation.TracingPropagator.inject(TracingPropagator.java:58)
at ddtrot.dd.context.propagation.CompositePropagator.inject(CompositePropagator.java:18)
at datadog.opentracing.DDTracer.inject(DDTracer.java:490)
Caused by: java.lang.ClassNotFoundException: ddtrot.dd.trace.api.llmobs.LLMObs
Analysis
This is a regression from #12416 (9a03e95e32), which makes DatadogHttpCodec$Injector.inject call LLMObsInternal.propagationValuesFor(...). LLMObsInternal (internal-api) extends LLMObs (dd-trace-api).
In dd-trace-ot/build.gradle.kts, the shadow jar excludes :dd-trace-api and relocates datadog. to ddtrot.dd.. The exclude %regex[datadog/trace/api/(?!Functions|Endpoint)[^/]*] only covers classes directly under datadog/trace/api/, so datadog.trace.api.llmobs.* is relocated. The resulting dd-trace-ot-1.67.1.jar contains ddtrot/dd/trace/api/llmobs/LLMObsInternal.class (superclass ddtrot.dd.trace.api.llmobs.LLMObs) but no LLMObs.class. dd-trace-api only provides the unrelocated datadog/trace/api/llmobs/LLMObs.
Possible fix (untested): add exclude("datadog.trace.api.llmobs.*") to the relocate("datadog.", "ddtrot.dd.") block.
Environment
dd-trace-otanddd-trace-api1.67.1 (also 1.67.0)- JDK 25 (Temurin), OpenTracing 0.32.0
Expected Behavior
DDTracer.inject(...) injects the Datadog headers into the carrier without error, as it does in 1.66.0:
injected headers: {x-datadog-parent-id=..., x-datadog-sampling-priority=1, tracestate=dd=s:1;..., x-datadog-tags=_dd.p.dm=-1,...}
### Reproduction Code
Only `dd-trace-ot` and `dd-trace-api` are needed. Change `dd.version` to `1.66.0` to see it work.
`pom.xml`:
```xml
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>repro</groupId>
<artifactId>dd-ot-llmobs-repro</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.release>17</maven.compiler.release>
<dd.version>1.67.1</dd.version>
</properties>
<dependencies>
<dependency>
<groupId>com.datadoghq</groupId>
<artifactId>dd-trace-ot</artifactId>
<version>${dd.version}</version>
</dependency>
<dependency>
<groupId>com.datadoghq</groupId>
<artifactId>dd-trace-api</artifactId>
<version>${dd.version}</version>
</dependency>
</dependencies>
</project>
src/main/java/repro/Main.java:
package repro;
import datadog.opentracing.DDTracer;
import io.opentracing.Span;
import io.opentracing.propagation.Format;
import io.opentracing.propagation.TextMapAdapter;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
System.setProperty("dd.writer.type", "LoggingWriter");
DDTracer tracer = DDTracer.builder().serviceName("repro").build();
Span span = tracer.buildSpan("op").start();
Map<String, String> headers = new HashMap<>();
tracer.inject(span.context(), Format.Builtin.HTTP_HEADERS, new TextMapAdapter(headers));
System.out.println("injected headers: " + headers);
span.finish();
tracer.close();
}
}
Run:
mvn -q -B compile
mvn -q -B dependency:build-classpath -Dmdep.outputFile=cp.txt
java -cp target/classes:$(cat cp.txt) repro.Main
(mvn exec:java also fails, but reports LLMObsInternal as the missing class because it wraps the error.)
- 主要语言
- Java
- 星标
- 736
- 派生
- 364
- 平均合并
- 3 天 9 小时
- 30 天内合并 PR
- 219
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
DataDog/dd-trace-java 的其他 Issue
-
type: bug report
难度 2/5 1-3 小时 新手友好度 72/100
DataDog/dd-trace-java#12818 · 3 个 reaction ·
维护者通常 2 天内回复
-
Update DEFAULT_HTTP_CLIENT_ERROR_STATUSES to include 5xx status codes可能重新可做 关联的 PR 已关闭且未合并。 未关闭type: feature request
难度 1/5 1-3 小时 新手友好度 70/100
DataDog/dd-trace-java#10245 · 1 条评论 ·
维护者通常 2 天内回复
-
type: feature request
难度 4/5 3-5 天 新手友好度 48/100
DataDog/dd-trace-java#12838 · 2 条评论 ·
维护者通常 2 天内回复
-
Startup ~2x slower with AOT class linking: agent retransforms ~22k preloaded classes (JDK 25, 1.67.0)可能已有人在做 @mcculls 于 6 天前认领。 未关闭type: bug report
DataDog/dd-trace-java#12795 · 2 条评论 · 已指派 1 人 ·
维护者通常 2 天内回复
-
gRPC server instrumentations (grpc-1.5, armeria-grpc) don't make extracted W3C baggage current in the handler可能已有人在做 @mcculls 于 16 天前认领。 未关闭comp: context propagation inst: grpc type: feature request
难度 3/5 1-2 天 新手友好度 78/100
DataDog/dd-trace-java#12654 · 已指派 1 人 ·
维护者通常 2 天内回复
查看 DataDog/dd-trace-java 的全部 Issue
相似的 Issue
-
:maddi-inspection-kotlin:test runs out of heap in a full maddi test run; exit 1 with no failing test未关闭build/ci front-end:kotlin
难度 2/5 1-3 小时 新手友好度 62/100
-
难度 2/5 1-3 小时 新手友好度 74/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 65/100
uwolfer/gerrit-intellij-plugin#768 ·
维护者通常 1 天内回复
-
github_actions
难度 2/5 1-3 小时 新手友好度 62/100
hiero-ledger/hiero-consensus-node#27621 ·
维护者通常 1 天内回复
-
x:knowledge/elementary x:module/practice-exercise
难度 2/5 1-3 小时 新手友好度 65/100