Repository: maven Updated Branches: refs/heads/master 5f71f9789 -> bb4988496
better plugin/extensions realm parent classloader 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/bb498849 Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/bb498849 Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/bb498849 Branch: refs/heads/master Commit: bb4988496a0e3b50ee5a1922bcd54f731eb2d5b2 Parents: 5f71f97 Author: Igor Fedorenko <[email protected]> Authored: Thu Jan 8 08:08:42 2015 -0500 Committer: Igor Fedorenko <[email protected]> Committed: Thu Jan 8 08:08:47 2015 -0500 ---------------------------------------------------------------------- .../maven/classrealm/DefaultClassRealmManager.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/bb498849/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java b/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java index 3584d53..a5bb352 100644 --- a/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java +++ b/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java @@ -59,6 +59,16 @@ public class DefaultClassRealmManager implements ClassRealmManager { + /** + * During normal command line build, ClassWorld is loaded by jvm system classloader, which only includes + * plexus-classworlds jar and possibly javaagent classes, see http://jira.codehaus.org/browse/MNG-4747. + * <p> + * Using ClassWorld to determine plugin/extensions realm parent classloaders gives m2e and integration test harness + * flexibility to load multiple version of maven into dedicated classloaders without assuming state of jvm system + * classloader. + */ + private static final ClassLoader PARENT_CLASSLOADER = ClassWorld.class.getClassLoader(); + @Requirement private Logger logger; @@ -329,7 +339,7 @@ public class DefaultClassRealmManager throw new IllegalArgumentException( "extension plugin missing" ); } - ClassLoader parent = ClassLoader.getSystemClassLoader(); + ClassLoader parent = PARENT_CLASSLOADER; Map<String, ClassLoader> foreignImports = Collections.<String, ClassLoader>singletonMap( "", getMavenApiRealm() ); @@ -347,7 +357,7 @@ public class DefaultClassRealmManager if ( parent == null ) { - parent = ClassLoader.getSystemClassLoader(); + parent = PARENT_CLASSLOADER; } return createRealm( getKey( plugin, false ), RealmType.Plugin, parent, parentImports, foreignImports, artifacts );
