diff --git a/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java b/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java index 04c13ce0fb5..5f1df5d050a 100644 --- a/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java +++ b/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java @@ -141,7 +141,9 @@ static final class Renamer extends Remapper { RENAMED_PACKAGES.put( "io/opentelemetry/javaagent/bootstrap/", "datadog/trace/bootstrap/otel/instrumentation/"); - RENAMED_PACKAGES.put("org/objectweb/asm/", "net/bytebuddy/jar/asm/"); + // we want to keep this package unchanged so it matches against any unshaded extensions + // dropped in at runtime; use replace to stop it being transformed by the shadow plugin + RENAMED_PACKAGES.put("org|objectweb|asm|".replace('|', '/'), "net/bytebuddy/jar/asm/"); } @Override diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ExtensionHandler.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ExtensionHandler.java index 1451debd20c..3f05fe5ac82 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ExtensionHandler.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ExtensionHandler.java @@ -126,8 +126,9 @@ protected byte[] doMapBytecode(String unused) { /** Maps logging references in the extension to use the tracer's embedded logger. */ public static final Function MAP_LOGGING = new Function() { - // substring stops string literal from being changed by shadow plugin - private final String ORG_SLF4J = "_org/slf4j/".substring(1); + // we want to keep this package unchanged so it matches against any unshaded extensions + // dropped in at runtime; use replace to stop it being transformed by the shadow plugin + private final String ORG_SLF4J = "org|slf4j|".replace('|', '/'); @Override public String apply(String internalName) { diff --git a/dd-java-agent/build.gradle b/dd-java-agent/build.gradle index cacc90e7d92..8831b322867 100644 --- a/dd-java-agent/build.gradle +++ b/dd-java-agent/build.gradle @@ -93,6 +93,8 @@ def generalShadowJarConfig(ShadowJar shadowJarTask) { // patch JFFI loading mechanism to maintain isolation exclude '**/com/kenai/jffi/Init.class' relocate('com.kenai.jffi.Init', 'com.kenai.jffi.PatchInit') + // use dd-instrument-java's embedded copy of asm + relocate('org.objectweb.asm', 'datadog.instrument.asm') // Minimize and relocate the airlift compressor dependency for ZSTD exclude '**/io/airlift/compress/bzip2/**' @@ -205,6 +207,8 @@ def sharedShadowJar = tasks.register('sharedShadowJar', ShadowJar) { exclude(project(':utils:config-utils')) exclude(project(':utils:time-utils')) exclude(dependency('org.slf4j::')) + // use dd-instrument-java's embedded copy of asm + exclude(dependency('org.ow2.asm:asm:')) } } includeShadowJar(sharedShadowJar, 'shared', includedJarFileTree) diff --git a/dd-trace-ot/build.gradle.kts b/dd-trace-ot/build.gradle.kts index f4c4273e30b..7c73abef06b 100644 --- a/dd-trace-ot/build.gradle.kts +++ b/dd-trace-ot/build.gradle.kts @@ -120,6 +120,8 @@ tasks.named("shadowJ exclude(dependency("io.opentracing.contrib:")) exclude(dependency("org.slf4j:")) exclude(dependency("com.github.jnr:")) + // indirect dependency of JNR, no need to embed + exclude(dependency("org.ow2.asm:")) } relocate("com.", "ddtrot.com.") {