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 ); }
