Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto
#12,857 0 comentarios 1 reacción 1 asignado Ver en GitHub

Los mantenedores suelen responder en 2 días

@amarziali ya está trabajando en esto.

Desde el 14/10/2026.

  • #12859 de @amarziali — abierto

Evaluación

Este issue todavía no se ha evaluado.

Descripción

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

Lenguaje dominante
Java
Estrellas
736
Forks
364
Merge medio
3 d 9 h
PR fusionados (30 d)
219

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de DataDog/dd-trace-java

Todos los issues de DataDog/dd-trace-java

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.