@@ -5,6 +5,14 @@ plugins {
55}
66
77val versions: Map <String , String > by extra
8+ val jacksonVersion: String = versions[" jackson" ]!!
9+
10+ configurations {
11+ create(" otelInstJacksonOverlay" ) {
12+ isCanBeResolved = true
13+ isCanBeConsumed = false
14+ }
15+ }
816
917dependencies {
1018 // pin released version or snapshot with pinned version
@@ -13,6 +21,11 @@ dependencies {
1321 // https://dl.bintray.com/open-telemetry/maven/
1422 implementation(" io.opentelemetry.javaagent" , " opentelemetry-javaagent" , version = " ${versions[" opentelemetry_java_agent_all" ]} " )
1523 implementation(project(" :filter-api" ))
24+
25+ add(" otelInstJacksonOverlay" , " com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion " )
26+ add(" otelInstJacksonOverlay" , " com.fasterxml.jackson.core:jackson-core:$jacksonVersion " )
27+ add(" otelInstJacksonOverlay" , " com.fasterxml.jackson.core:jackson-databind:$jacksonVersion " )
28+ add(" otelInstJacksonOverlay" , " com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:$jacksonVersion " )
1629}
1730
1831base.archivesBaseName = " hypertrace-agent"
@@ -49,6 +62,14 @@ tasks.register<Copy>("extractOtelAgentJarInstClassdata") {
4962
5063 from(zipTree(otelJavaAgentJar)) {
5164 include(" inst/**" )
65+ // OTel ships Jackson 2.16.x in inst/; overlay with jacksonVersion after relocation
66+ exclude(" inst/com/fasterxml/**" )
67+ exclude(" inst/org/yaml/**" )
68+ exclude(" inst/META-INF/maven/com.fasterxml.jackson.core/**" )
69+ exclude(" inst/META-INF/maven/com.fasterxml.jackson.dataformat/**" )
70+ exclude(" inst/META-INF/maven/org.yaml/**" )
71+ exclude(" inst/META-INF/versions/*/com/fasterxml/**" )
72+ exclude(" inst/META-INF/versions/*/org/yaml/**" )
5273 rename(" (^.*)\\ .classdata$" , " $1.class" )
5374 }
5475
@@ -84,10 +105,35 @@ tasks.register<Copy>("extractRelocatedOtelClasses") {
84105 into(" $buildDir /tmp/relocated-otel-classes" )
85106}
86107
108+ // Step 3c: Replace OTel's embedded Jackson with jacksonVersion
109+ tasks.register<Copy >(" overlayOtelInstJackson" ) {
110+ description = " Replaces OTel embedded Jackson/SnakeYAML in inst/ with $jacksonVersion "
111+
112+ dependsOn(" extractRelocatedOtelClasses" )
113+
114+ val overlayJars = configurations[" otelInstJacksonOverlay" ].files
115+
116+ overlayJars.forEach { jar ->
117+ from(zipTree(jar)) {
118+ include(" com/fasterxml/**" )
119+ include(" org/yaml/**" )
120+ include(" META-INF/maven/com.fasterxml.jackson.core/**" )
121+ include(" META-INF/maven/com.fasterxml.jackson.dataformat/**" )
122+ include(" META-INF/maven/org.yaml/**" )
123+ include(" META-INF/versions/**/com/fasterxml/**" )
124+ include(" META-INF/versions/**/org/yaml/**" )
125+ exclude(" **/module-info.class" )
126+ }
127+ }
128+
129+ into(" $buildDir /tmp/relocated-otel-classes/inst/org/hypertrace" )
130+ duplicatesStrategy = DuplicatesStrategy .EXCLUDE
131+ }
132+
87133tasks.register(" extractOtelInstrumentationToInst" ) {
88134 description = " Removes empty directories from the relocated classes directory"
89135
90- dependsOn(" extractRelocatedOtelClasses " )
136+ dependsOn(" overlayOtelInstJackson " )
91137
92138 doLast {
93139 // Find and delete empty directories
0 commit comments