Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

dd-trace-ot 1.67.x: NoClassDefFoundError `ddtrot/dd/trace/api/llmobs/LLMObs`

未关闭
#12,857 0 条评论 1 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 2 天内回复

@amarziali 已经在做这个了。

开始于 2026年10月14日。

  • #12859 来自 @amarziali —— 未关闭

评估

这个 Issue 还没有评估数据。

描述

type: bug report
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-ot and dd-trace-api 1.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

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

DataDog/dd-trace-java 的其他 Issue

查看 DataDog/dd-trace-java 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。