You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by el...@apache.org on 2026/08/02 12:25:17 UTC
(maven-remote-resources-plugin) 01/01: Close the remote resources classloader after execution (#273)
This is an automated email from the ASF dual-hosted git repository.
elharo pushed a commit to branch fix/issue-273-close-classloader
in repository https://gitbox.apache.org/repos/asf/maven-remote-resources-plugin.git
commit 466018cf62b9c6a95bebcef409d87a47105be6e6
Author: Elliotte Rusty Harold <el...@ibiblio.org>
AuthorDate: Sun Aug 2 12:25:07 2026 +0000
Close the remote resources classloader after execution (#273)
---
.../remote/AbstractProcessRemoteResourcesMojo.java | 13 +++++++++++--
.../resources/remote/RemoteResourcesMojoTest.java | 22 ++++++++++++++++++++++
2 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/apache/maven/plugin/resources/remote/AbstractProcessRemoteResourcesMojo.java b/src/main/java/org/apache/maven/plugin/resources/remote/AbstractProcessRemoteResourcesMojo.java
index f57f6d1..177d353 100644
--- a/src/main/java/org/apache/maven/plugin/resources/remote/AbstractProcessRemoteResourcesMojo.java
+++ b/src/main/java/org/apache/maven/plugin/resources/remote/AbstractProcessRemoteResourcesMojo.java
@@ -369,6 +369,8 @@ public abstract class AbstractProcessRemoteResourcesMojo extends AbstractMojo {
private VelocityEngine velocity;
+ private RemoteResourcesClassLoader classLoader;
+
protected final RepositorySystem repoSystem;
/**
@@ -435,7 +437,7 @@ public abstract class AbstractProcessRemoteResourcesMojo extends AbstractMojo {
List<File> resourceBundleArtifacts = downloadBundles(resourceBundles);
supplementModels = loadSupplements(supplementalModels);
- ClassLoader classLoader = initalizeClassloader(resourceBundleArtifacts);
+ classLoader = initalizeClassloader(resourceBundleArtifacts);
Thread.currentThread().setContextClassLoader(classLoader);
@@ -476,6 +478,13 @@ public abstract class AbstractProcessRemoteResourcesMojo extends AbstractMojo {
}
} finally {
Thread.currentThread().setContextClassLoader(origLoader);
+ if (classLoader != null) {
+ try {
+ classLoader.close();
+ } catch (IOException e) {
+ getLog().debug("Error closing remote resources classloader: " + e.getMessage(), e);
+ }
+ }
}
}
@@ -862,7 +871,7 @@ public abstract class AbstractProcessRemoteResourcesMojo extends AbstractMojo {
return bundleArtifacts;
}
- private ClassLoader initalizeClassloader(List<File> artifacts) throws MojoExecutionException {
+ private RemoteResourcesClassLoader initalizeClassloader(List<File> artifacts) throws MojoExecutionException {
RemoteResourcesClassLoader cl = new RemoteResourcesClassLoader(null);
try {
for (File artifact : artifacts) {
diff --git a/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java b/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java
index 583732b..00cc5c6 100644
--- a/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java
+++ b/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java
@@ -165,6 +165,28 @@ public class RemoteResourcesMojoTest extends AbstractMojoTestCase {
assertTrue(file.exists());
}
+ public void testClassLoaderIsClosedAfterExecution() throws Exception {
+ final MavenProjectResourcesStub project = createTestProject("default-closeclassloader");
+ final ProcessRemoteResourcesMojo mojo = lookupProcessMojoWithSettings(project, new String[] {"test:test:1.0"});
+
+ setupDefaultProject(project);
+
+ String path = pathOf(new DefaultArtifact(
+ "test", "test", VersionRange.createFromVersion("1.0"), null, "jar", "", new DefaultArtifactHandler()));
+
+ File file = new File(path);
+ file.getParentFile().mkdirs();
+ buildResourceBundle("default-closeclassloader-create", null, new String[] {"SIMPLE.txt"}, file);
+
+ mojo.execute();
+
+ RemoteResourcesClassLoader classLoader =
+ (RemoteResourcesClassLoader) getVariableValueFromObject(mojo, "classLoader");
+ assertNotNull(classLoader);
+ // resources from the bundle jars must no longer be served by the closed classloader
+ assertNull(classLoader.getResource("SIMPLE.txt"));
+ }
+
public void testVelocityUTF8() throws Exception {
final MavenProjectResourcesStub project = createTestProject("default-utf8");
final ProcessRemoteResourcesMojo mojo = lookupProcessMojoWithSettings(project, new String[] {"test:test:1.2"});