Repository: maven
Updated Branches:
  refs/heads/master 8ed9a1caa -> 6efacdb3f


dispose dynamically created class realms

this is mostly to help integration tests reuse the same realm ids,
but plugging resource leaks is generally a good thing.

Signed-off-by: Igor Fedorenko <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/117df855
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/117df855
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/117df855

Branch: refs/heads/master
Commit: 117df855e2591231a1efd1079d1e37b5e6f5a60a
Parents: 8ed9a1c
Author: Igor Fedorenko <[email protected]>
Authored: Thu Feb 5 19:44:45 2015 -0500
Committer: Igor Fedorenko <[email protected]>
Committed: Fri Feb 20 10:26:04 2015 -0500

----------------------------------------------------------------------
 .../java/org/apache/maven/cli/MavenCli.java     | 36 ++++++++++++++++++++
 1 file changed, 36 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/117df855/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
----------------------------------------------------------------------
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java 
b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
index 238be22..3878dae 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -27,10 +27,13 @@ import java.io.IOException;
 import java.io.PrintStream;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 import java.util.StringTokenizer;
 
 import org.apache.commons.cli.CommandLine;
@@ -81,6 +84,7 @@ import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.classworlds.ClassWorld;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
 import 
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.logging.LoggerManager;
 import org.codehaus.plexus.util.StringUtils;
@@ -190,6 +194,20 @@ public class MavenCli
         PrintStream oldout = System.out;
         PrintStream olderr = System.err;
 
+        final Set<String> realms;
+        if ( classWorld != null )
+        {
+            realms = new HashSet<String>();
+            for ( ClassRealm realm : classWorld.getRealms() )
+            {
+                realms.add( realm.getId() );
+            }
+        }
+        else
+        {
+            realms = Collections.emptySet();
+        }
+
         try
         {
             if ( stdout != null )
@@ -208,6 +226,24 @@ public class MavenCli
         }
         finally
         {
+            if ( classWorld != null )
+            {
+                for ( ClassRealm realm : new ArrayList<ClassRealm>( 
classWorld.getRealms() ) )
+                {
+                    String realmId = realm.getId();
+                    if ( !realms.contains( realmId ) )
+                    {
+                        try
+                        {
+                            classWorld.disposeRealm( realmId );
+                        }
+                        catch ( NoSuchRealmException ignored )
+                        {
+                            // can't happen
+                        }
+                    }
+                }
+            }
             System.setOut( oldout );
             System.setErr( olderr );
         }

Reply via email to