From b7f5cfb047565b3ade06f0ed5c10a943d3d1f515 Mon Sep 17 00:00:00 2001 From: Steve Rao Date: Thu, 21 Aug 2025 10:40:26 +0800 Subject: [PATCH 1/4] Add constructor to AgentClassLoader for custom parent ClassLoader --- .../javaagent/bootstrap/AgentClassLoader.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java index 340809bc90ff..efc56c2a8da2 100644 --- a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java +++ b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java @@ -84,7 +84,24 @@ public AgentClassLoader(File javaagentFile) { */ public AgentClassLoader( File javaagentFile, String internalJarFileName, boolean isSecurityManagerSupportEnabled) { - super(new URL[] {}, getParentClassLoader()); + this(javaagentFile, internalJarFileName, isSecurityManagerSupportEnabled, null); + } + + /** + * Construct a new AgentClassLoader with a custom parent ClassLoader. + * + * @param javaagentFile Used for resource lookups. + * @param internalJarFileName File name of the internal jar + * @param isSecurityManagerSupportEnabled Whether this class loader should define classes with all + * permissions + * @param parentClassLoader Custom parent ClassLoader to use. If null, the default parent will be used. + */ + public AgentClassLoader( + File javaagentFile, + String internalJarFileName, + boolean isSecurityManagerSupportEnabled, + @Nullable ClassLoader parentClassLoader) { + super(new URL[] {}, parentClassLoader != null ? parentClassLoader : getParentClassLoader()); if (javaagentFile == null) { throw new IllegalArgumentException("Agent jar location should be set"); } From a7ac1da57edfe5e9207ba4c0d63194257b9ba115 Mon Sep 17 00:00:00 2001 From: otelbot <197425009+otelbot@users.noreply.github.com> Date: Thu, 21 Aug 2025 02:48:30 +0000 Subject: [PATCH 2/4] ./gradlew spotlessApply --- .../javaagent/bootstrap/AgentClassLoader.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java index efc56c2a8da2..d0effed9bd62 100644 --- a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java +++ b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java @@ -94,11 +94,12 @@ public AgentClassLoader( * @param internalJarFileName File name of the internal jar * @param isSecurityManagerSupportEnabled Whether this class loader should define classes with all * permissions - * @param parentClassLoader Custom parent ClassLoader to use. If null, the default parent will be used. + * @param parentClassLoader Custom parent ClassLoader to use. If null, the default parent will be + * used. */ public AgentClassLoader( - File javaagentFile, - String internalJarFileName, + File javaagentFile, + String internalJarFileName, boolean isSecurityManagerSupportEnabled, @Nullable ClassLoader parentClassLoader) { super(new URL[] {}, parentClassLoader != null ? parentClassLoader : getParentClassLoader()); From 5b9e630dc4c5fb8219fb0d84f555bbe2ad783b39 Mon Sep 17 00:00:00 2001 From: Steve Rao Date: Fri, 22 Aug 2025 11:27:53 +0800 Subject: [PATCH 3/4] Update javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java Co-authored-by: Trask Stalnaker --- .../io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java | 1 + 1 file changed, 1 insertion(+) diff --git a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java index d0effed9bd62..d88de712d5d7 100644 --- a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java +++ b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java @@ -89,6 +89,7 @@ public AgentClassLoader( /** * Construct a new AgentClassLoader with a custom parent ClassLoader. + * This is used by some 3rd party command-line utilities in order to reuse classes that are bundled as classdata files under `inst/`. * * @param javaagentFile Used for resource lookups. * @param internalJarFileName File name of the internal jar From 0a972df705b1a819ebfb05bf813ecd733c546c7e Mon Sep 17 00:00:00 2001 From: otelbot <197425009+otelbot@users.noreply.github.com> Date: Fri, 22 Aug 2025 03:32:14 +0000 Subject: [PATCH 4/4] ./gradlew spotlessApply --- .../opentelemetry/javaagent/bootstrap/AgentClassLoader.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java index d88de712d5d7..4baba3e19085 100644 --- a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java +++ b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java @@ -88,8 +88,9 @@ public AgentClassLoader( } /** - * Construct a new AgentClassLoader with a custom parent ClassLoader. - * This is used by some 3rd party command-line utilities in order to reuse classes that are bundled as classdata files under `inst/`. + * Construct a new AgentClassLoader with a custom parent ClassLoader. This is used by some 3rd + * party command-line utilities in order to reuse classes that are bundled as classdata files + * under `inst/`. * * @param javaagentFile Used for resource lookups. * @param internalJarFileName File name of the internal jar