From c175d97809e69d7882c8bfd22065990d117035f8 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Tue, 5 Nov 2024 14:02:25 +0200 Subject: [PATCH 1/3] Remove duplicate byte buddy classes --- javaagent/build.gradle.kts | 40 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index ef7a6369eac0..762ee39292d9 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -141,23 +141,43 @@ tasks { archiveFileName.set("bootstrapLibs.jar") } - val relocateBaseJavaagentLibs by registering(ShadowJar::class) { + val relocateBaseJavaagentLibsTmp by registering(ShadowJar::class) { configurations = listOf(baseJavaagentLibs) excludeBootstrapClasses() duplicatesStrategy = DuplicatesStrategy.FAIL + archiveFileName.set("baseJavaagentLibs-relocated-tmp.jar") + } + + val relocateBaseJavaagentLibs by registering(ShadowJar::class) { + dependsOn(relocateBaseJavaagentLibsTmp) + + copyByteBuddy(relocateBaseJavaagentLibsTmp.get().archiveFile) + + duplicatesStrategy = DuplicatesStrategy.FAIL + archiveFileName.set("baseJavaagentLibs-relocated.jar") } - val relocateJavaagentLibs by registering(ShadowJar::class) { + val relocateJavaagentLibsTmp by registering(ShadowJar::class) { configurations = listOf(javaagentLibs) excludeBootstrapClasses() duplicatesStrategy = DuplicatesStrategy.FAIL + archiveFileName.set("javaagentLibs-relocated-tmp.jar") + } + + val relocateJavaagentLibs by registering(ShadowJar::class) { + dependsOn(relocateJavaagentLibsTmp) + + copyByteBuddy(relocateJavaagentLibsTmp.get().archiveFile) + + duplicatesStrategy = DuplicatesStrategy.FAIL + archiveFileName.set("javaagentLibs-relocated.jar") } @@ -363,6 +383,22 @@ fun CopySpec.isolateClasses(jar: Provider) { } } +fun CopySpec.copyByteBuddy(jar: Provider) { + // Byte buddy jar includes classes compiled for java 5 at the root of the jar and the same classes + // compiled for java 8 under META-INF/versions/9. Here we move the classes from + // META-INF/versions/9/net/bytebuddy to net/bytebuddy to get rid of the duplicate classes. + from(zipTree(jar)) { + eachFile { + if (path.startsWith("net/bytebuddy/")) { + exclude() + } else if (path.startsWith("META-INF/versions/9/net/bytebuddy/")) { + path = path.removePrefix("META-INF/versions/9/") + } + } + includeEmptyDirs = false + } +} + // exclude bootstrap projects from javaagent libs - they won't be added to inst/ fun ShadowJar.excludeBootstrapClasses() { dependencies { From dc3a0dd73beff264f1ba1929dc04f862444d6f62 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Tue, 5 Nov 2024 16:40:10 +0200 Subject: [PATCH 2/3] fix --- javaagent/build.gradle.kts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index 762ee39292d9..f83979ea424a 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -151,7 +151,7 @@ tasks { archiveFileName.set("baseJavaagentLibs-relocated-tmp.jar") } - val relocateBaseJavaagentLibs by registering(ShadowJar::class) { + val relocateBaseJavaagentLibs by registering(Jar::class) { dependsOn(relocateBaseJavaagentLibsTmp) copyByteBuddy(relocateBaseJavaagentLibsTmp.get().archiveFile) @@ -171,7 +171,7 @@ tasks { archiveFileName.set("javaagentLibs-relocated-tmp.jar") } - val relocateJavaagentLibs by registering(ShadowJar::class) { + val relocateJavaagentLibs by registering(Jar::class) { dependsOn(relocateJavaagentLibsTmp) copyByteBuddy(relocateJavaagentLibsTmp.get().archiveFile) @@ -389,7 +389,9 @@ fun CopySpec.copyByteBuddy(jar: Provider) { // META-INF/versions/9/net/bytebuddy to net/bytebuddy to get rid of the duplicate classes. from(zipTree(jar)) { eachFile { - if (path.startsWith("net/bytebuddy/")) { + if (path.startsWith("net/bytebuddy/") + // this is our class that we have placed in the byte buddy package, need to preserve it + && !path.startsWith("net/bytebuddy/agent/builder/AgentBuilderUtil")) { exclude() } else if (path.startsWith("META-INF/versions/9/net/bytebuddy/")) { path = path.removePrefix("META-INF/versions/9/") From 0ef94bd95f5614ae7756ad66dea5e4f6586db4c8 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Tue, 5 Nov 2024 17:34:44 +0200 Subject: [PATCH 3/3] spotless --- javaagent/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index f83979ea424a..2fc622d2b38e 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -389,9 +389,9 @@ fun CopySpec.copyByteBuddy(jar: Provider) { // META-INF/versions/9/net/bytebuddy to net/bytebuddy to get rid of the duplicate classes. from(zipTree(jar)) { eachFile { - if (path.startsWith("net/bytebuddy/") - // this is our class that we have placed in the byte buddy package, need to preserve it - && !path.startsWith("net/bytebuddy/agent/builder/AgentBuilderUtil")) { + if (path.startsWith("net/bytebuddy/") && + // this is our class that we have placed in the byte buddy package, need to preserve it + !path.startsWith("net/bytebuddy/agent/builder/AgentBuilderUtil")) { exclude() } else if (path.startsWith("META-INF/versions/9/net/bytebuddy/")) { path = path.removePrefix("META-INF/versions/9/")