dd-trace-ot 1.67.x: NoClassDefFoundError `ddtrot/dd/trace/api/llmobs/LLMObs`
Maintainer antworten meist innerhalb von 2 Tagen
@amarziali arbeitet bereits daran.
Seit 14.10.2026.
Bewertung
Dieses Issue wurde noch nicht bewertet.
Beschreibung
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.)
- Vorherrschende Sprache
- Java
- Sterne
- 736
- Forks
- 364
- Ø Merge
- 3 T. 9 Std.
- Gemergte PRs (30 T.)
- 219
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus DataDog/dd-trace-java
-
type: bug report
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
DataDog/dd-trace-java#12818 · 4 Reaktionen ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Update DEFAULT_HTTP_CLIENT_ERROR_STATUSES to include 5xx status codesEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offentype: feature request
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 70/100
DataDog/dd-trace-java#10245 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
type: feature request
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
DataDog/dd-trace-java#12838 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Startup ~2x slower with AOT class linking: agent retransforms ~22k preloaded classes (JDK 25, 1.67.0)Evtl. vergeben @mcculls hat das vor 10 Tagen übernommen. Offentype: bug report
DataDog/dd-trace-java#12795 · 6 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
-
gRPC server instrumentations (grpc-1.5, armeria-grpc) don't make extracted W3C baggage current in the handlerEvtl. vergeben @mcculls hat das vor 20 Tagen übernommen. Offencomp: context propagation inst: grpc type: feature request
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 78/100
DataDog/dd-trace-java#12654 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
Alle Issues in DataDog/dd-trace-java
Ähnliche Issues
-
enhancement Improvement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
zowe/zowe-client-java-sdk#647 ·
-
NullPointerException when a `DeserializationProblemHandler` returns `null` for `byte[]` (single value unwrapped) and `char[]` elementsEvtl. vergeben @Marti2203 hat das heute übernommen. Offen
Schwierigkeit 2/5 Ein halber Tag Anfängerfreundlichkeit 88/100
FasterXML/jackson-databind#6300 ·
Maintainer antworten meist innerhalb von 1 Tag
-
content good first issue
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 95/100
cpinitiative/usaco-guide#6699 ·
Maintainer antworten meist innerhalb von 1 Tag
-
BC remittance upload: a claim MSP refused (S03) is saved with a blank status instead of refused (F)Evtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offentype: bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
carlos-emr/carlos#4933 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
apache/rocketmq-dashboard#6925 ·
Maintainer antworten meist innerhalb von 3 Tagen