This is an automated email from the ASF dual-hosted git repository.

elharo pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/maven-remote-resources-plugin.git


The following commit(s) were added to refs/heads/master by this push:
     new 5540561  Close the remote resources classloader after execution (#273) 
(#281)
5540561 is described below

commit 55405612a425ebed621e6ccf92f079190b3a2a5a
Author: Elliotte Rusty Harold <[email protected]>
AuthorDate: Wed Oct 28 13:53:08 2026 +0000

    Close the remote resources classloader after execution (#273) (#281)
---
 .../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 d1062ee..b848a35 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
@@ -395,6 +395,8 @@ public abstract class AbstractProcessRemoteResourcesMojo 
extends AbstractMojo {
 
     private VelocityEngine velocity;
 
+    private RemoteResourcesClassLoader classLoader;
+
     protected final RepositorySystem repoSystem;
 
     /**
@@ -460,7 +462,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);
 
@@ -501,6 +503,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);
+                }
+            }
         }
     }
 
@@ -906,7 +915,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 b812148..bbdbed6 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
@@ -327,6 +327,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"});

Reply via email to