Repository: maven
Updated Branches:
  refs/heads/master 4f553420c -> 9f50eabea


MNG-5793 do not register same realm both with plugin and extensions realm caches

Signed-off-by: Igor Fedorenko <ifedore...@apache.org>


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

Branch: refs/heads/master
Commit: 9f50eabea54343fca522f42a2a41ffdb086e3240
Parents: 4f55342
Author: Igor Fedorenko <ifedore...@apache.org>
Authored: Wed Mar 25 15:39:27 2015 -0400
Committer: Igor Fedorenko <ifedore...@apache.org>
Committed: Wed Mar 25 15:43:47 2015 -0400

----------------------------------------------------------------------
 .../internal/DefaultMavenPluginManager.java     | 113 ++++++++++---------
 1 file changed, 58 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/9f50eabe/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
 
b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
index d300c45..d32e04c 100644
--- 
a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
+++ 
b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
@@ -333,35 +333,63 @@ public class DefaultMavenPluginManager
         throws PluginResolutionException, PluginContainerException
     {
         Plugin plugin = pluginDescriptor.getPlugin();
-
         MavenProject project = session.getCurrentProject();
 
-        Map<String, ClassLoader> foreignImports = calcImports( project, 
parent, imports );
-
-        PluginRealmCache.Key cacheKey =
-            pluginRealmCache.createKey( plugin, parent, foreignImports, 
filter, project.getRemotePluginRepositories(),
-                                        session.getRepositorySession() );
+        if ( plugin.isExtensions() )
+        {
+            ExtensionRealmCache.CacheRecord extensionRecord;
+            try
+            {
+                RepositorySystemSession repositorySession = 
session.getRepositorySession();
+                extensionRecord = setupExtensionsRealm( project, plugin, 
repositorySession );
+            }
+            catch ( PluginManagerException e )
+            {
+                // extensions realm is expected to be fully setup at this point
+                // any exception means a problem in maven code, not a user 
error
+                throw new IllegalStateException( e );
+            }
 
-        PluginRealmCache.CacheRecord cacheRecord = pluginRealmCache.get( 
cacheKey );
+            ClassRealm pluginRealm = extensionRecord.realm;
+            List<Artifact> pluginArtifacts = extensionRecord.artifacts;
 
-        if ( cacheRecord != null )
-        {
-            pluginDescriptor.setClassRealm( cacheRecord.realm );
-            pluginDescriptor.setArtifacts( new ArrayList<Artifact>( 
cacheRecord.artifacts ) );
             for ( ComponentDescriptor<?> componentDescriptor : 
pluginDescriptor.getComponents() )
             {
-                componentDescriptor.setRealm( cacheRecord.realm );
+                componentDescriptor.setRealm( pluginRealm );
             }
+
+            pluginDescriptor.setClassRealm( pluginRealm );
+            pluginDescriptor.setArtifacts( pluginArtifacts );
         }
         else
         {
-            createPluginRealm( pluginDescriptor, session, parent, 
foreignImports, filter );
+            Map<String, ClassLoader> foreignImports = calcImports( project, 
parent, imports );
 
-            cacheRecord =
-                pluginRealmCache.put( cacheKey, 
pluginDescriptor.getClassRealm(), pluginDescriptor.getArtifacts() );
-        }
+            PluginRealmCache.Key cacheKey =
+                pluginRealmCache.createKey( plugin, parent, foreignImports, 
filter,
+                                            
project.getRemotePluginRepositories(), session.getRepositorySession() );
+
+            PluginRealmCache.CacheRecord cacheRecord = pluginRealmCache.get( 
cacheKey );
+
+            if ( cacheRecord != null )
+            {
+                pluginDescriptor.setClassRealm( cacheRecord.realm );
+                pluginDescriptor.setArtifacts( new ArrayList<Artifact>( 
cacheRecord.artifacts ) );
+                for ( ComponentDescriptor<?> componentDescriptor : 
pluginDescriptor.getComponents() )
+                {
+                    componentDescriptor.setRealm( cacheRecord.realm );
+                }
+            }
+            else
+            {
+                createPluginRealm( pluginDescriptor, session, parent, 
foreignImports, filter );
 
-        pluginRealmCache.register( project, cacheKey, cacheRecord );
+                cacheRecord =
+                    pluginRealmCache.put( cacheKey, 
pluginDescriptor.getClassRealm(), pluginDescriptor.getArtifacts() );
+            }
+
+            pluginRealmCache.register( project, cacheKey, cacheRecord );
+        }
     }
 
     private void createPluginRealm( PluginDescriptor pluginDescriptor, 
MavenSession session, ClassLoader parent,
@@ -388,49 +416,24 @@ public class DefaultMavenPluginManager
         final List<Artifact> pluginArtifacts;
 
         RepositorySystemSession repositorySession = 
session.getRepositorySession();
-        if ( plugin.isExtensions() )
-        {
-            ExtensionRealmCache.CacheRecord extensionRecord;
-            try
-            {
-                extensionRecord = setupExtensionsRealm( project, plugin, 
repositorySession );
-            }
-            catch ( PluginManagerException e )
-            {
-                // extensions realm is expected to be fully setup at this point
-                // any exception means a problem in maven code, not a user 
error
-                throw new IllegalStateException( e );
-            }
-
-            pluginRealm = extensionRecord.realm;
-            pluginArtifacts = extensionRecord.artifacts;
-
-            for ( ComponentDescriptor<?> componentDescriptor : 
pluginDescriptor.getComponents() )
-            {
-                componentDescriptor.setRealm( pluginRealm );
-            }
-        }
-        else
-        {
-            DependencyFilter dependencyFilter = 
project.getExtensionDependencyFilter();
-            dependencyFilter = AndDependencyFilter.newInstance( 
dependencyFilter, filter );
+        DependencyFilter dependencyFilter = 
project.getExtensionDependencyFilter();
+        dependencyFilter = AndDependencyFilter.newInstance( dependencyFilter, 
filter );
 
-            DependencyNode root =
-                pluginDependenciesResolver.resolve( plugin, 
RepositoryUtils.toArtifact( pluginArtifact ),
-                                                    dependencyFilter, 
project.getRemotePluginRepositories(),
-                                                    repositorySession );
+        DependencyNode root =
+            pluginDependenciesResolver.resolve( plugin, 
RepositoryUtils.toArtifact( pluginArtifact ),
+                                                dependencyFilter, 
project.getRemotePluginRepositories(),
+                                                repositorySession );
 
-            PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
-            root.accept( nlg );
+        PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
+        root.accept( nlg );
 
-            pluginArtifacts = toMavenArtifacts( root, nlg );
+        pluginArtifacts = toMavenArtifacts( root, nlg );
 
-            pluginRealm =
-                classRealmManager.createPluginRealm( plugin, parent, null, 
foreignImports,
-                                                     toAetherArtifacts( 
pluginArtifacts ) );
+        pluginRealm =
+            classRealmManager.createPluginRealm( plugin, parent, null, 
foreignImports,
+                                                 toAetherArtifacts( 
pluginArtifacts ) );
 
-            discoverPluginComponents( pluginRealm, plugin, pluginDescriptor );
-        }
+        discoverPluginComponents( pluginRealm, plugin, pluginDescriptor );
 
         pluginDescriptor.setClassRealm( pluginRealm );
         pluginDescriptor.setArtifacts( pluginArtifacts );

Reply via email to