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