MNG-5742 fixed null ComponentDescriptor#realm for extensions plugins 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/a670e907 Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/a670e907 Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/a670e907 Branch: refs/heads/maven-3.2.6 Commit: a670e90788c97bad80f94de9ada5f4fb0b00bbab Parents: b46fa7d Author: Igor Fedorenko <ifedore...@apache.org> Authored: Fri Dec 26 13:27:46 2014 -0500 Committer: Karl Heinz Marbaise <khmarba...@apache.org> Committed: Mon Oct 12 22:47:26 2015 +0200 ---------------------------------------------------------------------- .../internal/DefaultMavenPluginManager.java | 9 ++++-- .../apache/maven/plugin/PluginManagerTest.java | 21 +++++++++++++ .../pom.xml | 31 ++++++++++++++++++++ 3 files changed, 59 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/a670e907/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 c815920..5704276 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 @@ -390,8 +390,6 @@ public class DefaultMavenPluginManager RepositorySystemSession repositorySession = session.getRepositorySession(); if ( plugin.isExtensions() ) { - // TODO discover components in #setupExtensionsRealm - ExtensionRealmCache.CacheRecord extensionRecord; try { @@ -406,6 +404,11 @@ public class DefaultMavenPluginManager pluginRealm = extensionRecord.realm; pluginArtifacts = extensionRecord.artifacts; + + for ( ComponentDescriptor<?> componentDescriptor : pluginDescriptor.getComponents() ) + { + componentDescriptor.setRealm( pluginRealm ); + } } else { @@ -877,6 +880,8 @@ public class DefaultMavenPluginManager { ClassRealm extensionRealm = classRealmManager.createExtensionRealm( plugin, toAetherArtifacts( artifacts ) ); + // TODO figure out how to use the same PluginDescriptor when running mojos + PluginDescriptor pluginDescriptor = null; if ( plugin.isExtensions() && !artifacts.isEmpty() ) { http://git-wip-us.apache.org/repos/asf/maven/blob/a670e907/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java ---------------------------------------------------------------------- diff --git a/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java b/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java index bc87702..025e772 100644 --- a/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java +++ b/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java @@ -30,6 +30,7 @@ import org.apache.maven.model.Plugin; import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.classworlds.realm.ClassRealm; import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.component.repository.ComponentDescriptor; @@ -318,4 +319,24 @@ public class PluginManagerTest assertNotNull( descriptor.getImplementationClass() ); } } + + public void testBuildExtensionsPluginLoading() + throws Exception + { + RepositoryRequest repositoryRequest = new DefaultRepositoryRequest(); + repositoryRequest.setLocalRepository( getLocalRepository() ); + repositoryRequest.setRemoteRepositories( getPluginArtifactRepositories() ); + + // prime realm cache + MavenSession session = createMavenSession( getProject( "project-with-build-extensions-plugin" ) ); + MavenProject project = session.getCurrentProject(); + Plugin plugin = project.getPlugin( "org.apache.maven.its.plugins:maven-it-plugin" ); + + PluginDescriptor pluginDescriptor = + pluginManager.loadPlugin( plugin, session.getCurrentProject().getRemotePluginRepositories(), + session.getRepositorySession() ); + ClassRealm pluginRealm = pluginManager.getPluginRealm( session, pluginDescriptor ); + + assertEquals(pluginRealm, pluginDescriptor.getComponents().get(0).getRealm()); + } } http://git-wip-us.apache.org/repos/asf/maven/blob/a670e907/maven-core/src/test/projects/plugin-manager/project-with-build-extensions-plugin/pom.xml ---------------------------------------------------------------------- diff --git a/maven-core/src/test/projects/plugin-manager/project-with-build-extensions-plugin/pom.xml b/maven-core/src/test/projects/plugin-manager/project-with-build-extensions-plugin/pom.xml new file mode 100644 index 0000000..d4e34a5 --- /dev/null +++ b/maven-core/src/test/projects/plugin-manager/project-with-build-extensions-plugin/pom.xml @@ -0,0 +1,31 @@ +<project> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.apache.maven.test</groupId> + <artifactId>project-with-build-extensions-plugin</artifactId> + <version>1.0</version> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.its.plugins</groupId> + <artifactId>maven-it-plugin</artifactId> + <version>0.1</version> + <extensions>true</extensions> + <executions> + <execution> + <id>load</id> + <phase>validate</phase> + <configuration> + <resourcePaths>maven-core-it.properties</resourcePaths> + <pluginClassLoaderOutput>target/pcl.properties</pluginClassLoaderOutput> + </configuration> + <goals> + <goal>load</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project>