You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/02/01 00:29:23 UTC
svn commit: r617293 - in /maven/components/trunk:
maven-core/src/main/aspect/org/apache/maven/errors/
maven-core/src/main/java/org/apache/maven/lifecycle/binding/
maven-core/src/main/java/org/apache/maven/plugin/
maven-core/src/main/java/org/apache/mav...
Author: jdcasey
Date: Thu Jan 31 15:29:18 2008
New Revision: 617293
URL: http://svn.apache.org/viewvc?rev=617293&view=rev
Log:
Refactor the artifact-scanning logic from the realm manager and the plugin-artifact resolution logic in the plugin manager into two separate classes, one a component and one a static class, to allow the new PluginPrefixLoader to reuse some of both and create a lighter-weight approach to grabbing the PluginDescriptor for build-planning purposes...also avoids some needless error messages during build planning.
Added:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManagerSupport.java (with props)
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerSupport.java (with props)
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/DefaultPluginPrefixLoader.java (with props)
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/PluginPrefixLoader.java (with props)
maven/components/trunk/maven-project/src/main/java/org/apache/maven/realm/RealmScanningUtils.java (with props)
Modified:
maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/ExtensionErrorReporterAspect.aj
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/binding/DefaultMojoBindingFactory.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/DefaultPluginLoader.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/PluginLoader.java
maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml
maven/components/trunk/maven-project/src/main/java/org/apache/maven/realm/DefaultMavenRealmManager.java
Modified: maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/ExtensionErrorReporterAspect.aj
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/ExtensionErrorReporterAspect.aj?rev=617293&r1=617292&r2=617293&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/ExtensionErrorReporterAspect.aj (original)
+++ maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/ExtensionErrorReporterAspect.aj Thu Jan 31 15:29:18 2008
@@ -14,6 +14,7 @@
import org.apache.maven.plugin.version.PluginVersionResolutionException;
import org.apache.maven.plugin.InvalidPluginException;
import org.apache.maven.plugin.PluginManager;
+import org.apache.maven.plugin.PluginManagerSupport;
import org.apache.maven.plugin.PluginManagerException;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.model.Model;
@@ -215,7 +216,7 @@
cflow( dem_addPluginAsExtension( Plugin, originModel, remoteRepos, request ) )
&& cflow( execution( * PluginManager+.verifyPlugin( .. ) ) )
&& cflow( dpm_verifyVersionedPlugin( plugin ) )
- && call( private void DefaultPluginManager.checkRequiredMavenVersion( .. ) )
+ && call( void PluginManagerSupport+.checkRequiredMavenVersion( .. ) )
{
getReporter().reportIncompatibleMavenVersionForExtensionPlugin( plugin, originModel, remoteRepos, request, requiredVersion, currentVersion, err );
}
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/binding/DefaultMojoBindingFactory.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/binding/DefaultMojoBindingFactory.java?rev=617293&r1=617292&r2=617293&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/binding/DefaultMojoBindingFactory.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/binding/DefaultMojoBindingFactory.java Thu Jan 31 15:29:18 2008
@@ -4,9 +4,10 @@
import org.apache.maven.lifecycle.LifecycleLoaderException;
import org.apache.maven.lifecycle.LifecycleSpecificationException;
import org.apache.maven.lifecycle.model.MojoBinding;
-import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.loader.PluginLoader;
import org.apache.maven.plugin.loader.PluginLoaderException;
+import org.apache.maven.plugin.loader.PluginPrefixLoader;
import org.apache.maven.project.MavenProject;
import java.util.StringTokenizer;
@@ -22,7 +23,7 @@
implements MojoBindingFactory
{
- PluginLoader pluginLoader;
+ PluginPrefixLoader pluginPrefixLoader;
/**
* Parse the specified mojo string into a MojoBinding, optionally allowing plugin-prefix references.
@@ -49,10 +50,10 @@
String prefix = tok.nextToken();
- PluginDescriptor pluginDescriptor;
+ Plugin plugin;
try
{
- pluginDescriptor = pluginLoader.findPluginForPrefix( prefix, project, session );
+ plugin = pluginPrefixLoader.findPluginForPrefix( prefix, project, session );
}
catch ( PluginLoaderException e )
{
@@ -61,8 +62,8 @@
e );
}
- binding = createMojoBinding( pluginDescriptor.getGroupId(), pluginDescriptor.getArtifactId(),
- pluginDescriptor.getVersion(), tok.nextToken(), project );
+ binding = createMojoBinding( plugin.getGroupId(), plugin.getArtifactId(),
+ plugin.getVersion(), tok.nextToken(), project );
}
else if ( ( numTokens == 3 ) || ( numTokens == 4 ) )
{
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=617293&r1=617292&r2=617293&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Thu Jan 31 15:29:18 2008
@@ -53,7 +53,6 @@
import org.apache.maven.plugin.version.PluginVersionResolutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
-import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
import org.apache.maven.project.artifact.MavenMetadataSource;
import org.apache.maven.project.path.PathTranslator;
@@ -133,6 +132,8 @@
protected PluginMappingManager pluginMappingManager;
+ private PluginManagerSupport pluginManagerSupport;
+
// END component requirements
public DefaultPluginManager()
@@ -201,37 +202,7 @@
// if the groupId is internal, don't try to resolve it...
if ( !RESERVED_GROUP_IDS.contains( plugin.getGroupId() ) )
{
- VersionRange versionRange;
- try
- {
- versionRange = VersionRange.createFromVersionSpec( plugin.getVersion() );
- }
- catch ( InvalidVersionSpecificationException e )
- {
- throw new PluginManagerException( plugin, e );
- }
-
- List remoteRepositories = new ArrayList();
-
-// remoteRepositories.addAll( project.getPluginArtifactRepositories() );
-
- remoteRepositories.addAll( project.getRemoteArtifactRepositories() );
-
- MavenProject pluginProject = buildPluginProject( plugin, localRepository, remoteRepositories );
-
- checkRequiredMavenVersion( plugin, pluginProject, localRepository, remoteRepositories );
-
- checkPluginDependencySpec( plugin, pluginProject );
-
- Artifact pluginArtifact = artifactFactory.createPluginArtifact(
- plugin.getGroupId(),
- plugin.getArtifactId(),
- versionRange );
-
- pluginArtifact = project.replaceWithActiveArtifact( pluginArtifact );
-
- artifactResolver.resolve( pluginArtifact, project.getRemoteArtifactRepositories(),
- localRepository );
+ Artifact pluginArtifact = pluginManagerSupport.resolvePluginArtifact( plugin, project, session );
addPlugin( plugin, pluginArtifact, project, session );
}
@@ -272,70 +243,6 @@
setDescriptorClassAndArtifactInfo( pluginDescriptor, project, session, new ArrayList() );
return pluginDescriptor;
- }
-
- private void checkPluginDependencySpec( Plugin plugin,
- MavenProject pluginProject )
- throws InvalidPluginException
- {
- ArtifactFilter filter = new ScopeArtifactFilter( "runtime" );
- try
- {
- pluginProject.createArtifacts( artifactFactory, null, filter );
- }
- catch ( InvalidDependencyVersionException e )
- {
- throw new InvalidPluginException( "Plugin: " + plugin.getKey() + " has a dependency with an invalid version.", e );
- }
- }
-
- private MavenProject buildPluginProject( Plugin plugin,
- ArtifactRepository localRepository,
- List remoteRepositories )
- throws InvalidPluginException
- {
- Artifact artifact = artifactFactory.createProjectArtifact( plugin.getGroupId(),
- plugin.getArtifactId(),
- plugin.getVersion() );
-
- try
- {
- return mavenProjectBuilder.buildFromRepository( artifact,
- remoteRepositories,
- localRepository );
- }
- catch ( ProjectBuildingException e )
- {
- throw new InvalidPluginException( "Unable to build project for plugin '"
- + plugin.getKey() + "': " + e.getMessage(), e );
- }
- }
-
- /**
- * @param pluginProject
- * @todo would be better to store this in the plugin descriptor, but then it won't be available to the version
- * manager which executes before the plugin is instantiated
- */
- private void checkRequiredMavenVersion( Plugin plugin,
- MavenProject pluginProject,
- ArtifactRepository localRepository,
- List remoteRepositories )
- throws PluginVersionResolutionException, InvalidPluginException
- {
- // if we don't have the required Maven version, then ignore an update
- if ( ( pluginProject.getPrerequisites() != null )
- && ( pluginProject.getPrerequisites().getMaven() != null ) )
- {
- DefaultArtifactVersion requiredVersion = new DefaultArtifactVersion( pluginProject.getPrerequisites().getMaven() );
-
- if ( runtimeInformation.getApplicationVersion().compareTo( requiredVersion ) < 0 )
- {
- throw new PluginVersionResolutionException( plugin.getGroupId(),
- plugin.getArtifactId(),
- "Plugin requires Maven version "
- + requiredVersion );
- }
- }
}
protected void addPlugin( Plugin plugin,
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManagerSupport.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManagerSupport.java?rev=617293&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManagerSupport.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManagerSupport.java Thu Jan 31 15:29:18 2008
@@ -0,0 +1,262 @@
+package org.apache.maven.plugin;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.RuntimeInformation;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.version.PluginVersionManager;
+import org.apache.maven.plugin.version.PluginVersionNotFoundException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
+import org.apache.maven.realm.RealmManagementException;
+import org.apache.maven.realm.RealmScanningUtils;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.logging.LogEnabled;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DefaultPluginManagerSupport
+ implements PluginManagerSupport, LogEnabled, Contextualizable
+{
+
+ private ArtifactResolver artifactResolver;
+
+ private ArtifactFactory artifactFactory;
+
+ private MavenProjectBuilder mavenProjectBuilder;
+
+ private RuntimeInformation runtimeInformation;
+
+ private PluginVersionManager pluginVersionManager;
+
+ private Logger logger;
+
+ private Context containerContext;
+
+ public Artifact resolvePluginArtifact( Plugin plugin,
+ MavenProject project,
+ MavenSession session )
+ throws PluginManagerException, InvalidPluginException, PluginVersionResolutionException,
+ ArtifactResolutionException, ArtifactNotFoundException
+ {
+ ArtifactRepository localRepository = session.getLocalRepository();
+
+ VersionRange versionRange;
+ try
+ {
+ versionRange = VersionRange.createFromVersionSpec( plugin.getVersion() );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new PluginManagerException( plugin, e );
+ }
+
+ List remoteRepositories = new ArrayList();
+
+// remoteRepositories.addAll( project.getPluginArtifactRepositories() );
+
+ remoteRepositories.addAll( project.getRemoteArtifactRepositories() );
+
+ MavenProject pluginProject = buildPluginProject( plugin,
+ localRepository,
+ remoteRepositories );
+
+ checkRequiredMavenVersion( plugin, pluginProject, localRepository, remoteRepositories );
+
+ checkPluginDependencySpec( plugin, pluginProject );
+
+ Artifact pluginArtifact = artifactFactory.createPluginArtifact( plugin.getGroupId(),
+ plugin.getArtifactId(),
+ versionRange );
+
+ pluginArtifact = project.replaceWithActiveArtifact( pluginArtifact );
+
+ artifactResolver.resolve( pluginArtifact, remoteRepositories, localRepository );
+
+ return pluginArtifact;
+ }
+
+ public MavenProject buildPluginProject( Plugin plugin,
+ ArtifactRepository localRepository,
+ List remoteRepositories )
+ throws InvalidPluginException
+ {
+ Artifact artifact = artifactFactory.createProjectArtifact( plugin.getGroupId(),
+ plugin.getArtifactId(),
+ plugin.getVersion() );
+
+ try
+ {
+ return mavenProjectBuilder.buildFromRepository( artifact,
+ remoteRepositories,
+ localRepository );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ throw new InvalidPluginException( "Unable to build project for plugin '"
+ + plugin.getKey() + "': " + e.getMessage(), e );
+ }
+ }
+
+ /**
+ * @param pluginProject
+ * @todo would be better to store this in the plugin descriptor, but then it won't be available to the version
+ * manager which executes before the plugin is instantiated
+ */
+ public void checkRequiredMavenVersion( Plugin plugin,
+ MavenProject pluginProject,
+ ArtifactRepository localRepository,
+ List remoteRepositories )
+ throws PluginVersionResolutionException, InvalidPluginException
+ {
+ // if we don't have the required Maven version, then ignore an update
+ if ( ( pluginProject.getPrerequisites() != null )
+ && ( pluginProject.getPrerequisites().getMaven() != null ) )
+ {
+ DefaultArtifactVersion requiredVersion = new DefaultArtifactVersion(
+ pluginProject.getPrerequisites()
+ .getMaven() );
+
+ if ( runtimeInformation.getApplicationVersion().compareTo( requiredVersion ) < 0 )
+ {
+ throw new PluginVersionResolutionException( plugin.getGroupId(),
+ plugin.getArtifactId(),
+ "Plugin requires Maven version "
+ + requiredVersion );
+ }
+ }
+ }
+
+ public void checkPluginDependencySpec( Plugin plugin,
+ MavenProject pluginProject )
+ throws InvalidPluginException
+ {
+ ArtifactFilter filter = new ScopeArtifactFilter( "runtime" );
+ try
+ {
+ pluginProject.createArtifacts( artifactFactory, null, filter );
+ }
+ catch ( InvalidDependencyVersionException e )
+ {
+ throw new InvalidPluginException( "Plugin: " + plugin.getKey()
+ + " has a dependency with an invalid version.", e );
+ }
+ }
+
+ public PluginDescriptor loadIsolatedPluginDescriptor( Plugin plugin,
+ MavenProject project,
+ MavenSession session )
+ {
+ if ( plugin.getVersion() == null )
+ {
+ try
+ {
+ plugin.setVersion( pluginVersionManager.resolvePluginVersion( plugin.getGroupId(),
+ plugin.getArtifactId(),
+ project,
+ session ) );
+ }
+ catch ( PluginVersionResolutionException e )
+ {
+ logger.debug( "Failed to load plugin descriptor for: " + plugin.getKey(), e );
+ }
+ catch ( InvalidPluginException e )
+ {
+ logger.debug( "Failed to load plugin descriptor for: " + plugin.getKey(), e );
+ }
+ catch ( PluginVersionNotFoundException e )
+ {
+ logger.debug( "Failed to load plugin descriptor for: " + plugin.getKey(), e );
+ }
+ }
+
+ if ( plugin.getVersion() == null )
+ {
+ return null;
+ }
+
+ Artifact artifact = null;
+ try
+ {
+ artifact = resolvePluginArtifact( plugin, project, session );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ logger.debug( "Failed to load plugin descriptor for: " + plugin.getKey(), e );
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ logger.debug( "Failed to load plugin descriptor for: " + plugin.getKey(), e );
+ }
+ catch ( PluginManagerException e )
+ {
+ logger.debug( "Failed to load plugin descriptor for: " + plugin.getKey(), e );
+ }
+ catch ( InvalidPluginException e )
+ {
+ logger.debug( "Failed to load plugin descriptor for: " + plugin.getKey(), e );
+ }
+ catch ( PluginVersionResolutionException e )
+ {
+ logger.debug( "Failed to load plugin descriptor for: " + plugin.getKey(), e );
+ }
+
+ if ( artifact == null )
+ {
+ return null;
+ }
+
+ MavenPluginDiscoverer discoverer = new MavenPluginDiscoverer();
+ discoverer.setManager( RealmScanningUtils.getDummyComponentDiscovererManager() );
+
+ try
+ {
+ List componentSetDescriptors = RealmScanningUtils.scanForComponentSetDescriptors( artifact,
+ discoverer,
+ containerContext,
+ "Plugin: "
+ + plugin.getKey() );
+
+ if ( !componentSetDescriptors.isEmpty() )
+ {
+ return (PluginDescriptor) componentSetDescriptors.get( 0 );
+ }
+ }
+ catch ( RealmManagementException e )
+ {
+ logger.debug( "Failed to scan plugin artifact: " + artifact.getId()
+ + " for descriptors.", e );
+ }
+
+ return null;
+ }
+
+ public void enableLogging( Logger logger )
+ {
+ this.logger = logger;
+ }
+
+ public void contextualize( Context context )
+ throws ContextException
+ {
+ containerContext = context;
+ }
+}
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManagerSupport.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManagerSupport.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerSupport.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerSupport.java?rev=617293&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerSupport.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerSupport.java Thu Jan 31 15:29:18 2008
@@ -0,0 +1,48 @@
+package org.apache.maven.plugin;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.MavenProject;
+
+import java.util.List;
+
+public interface PluginManagerSupport
+{
+
+ Artifact resolvePluginArtifact( Plugin plugin,
+ MavenProject project,
+ MavenSession session )
+ throws PluginManagerException, InvalidPluginException, PluginVersionResolutionException,
+ ArtifactResolutionException, ArtifactNotFoundException;
+
+ MavenProject buildPluginProject( Plugin plugin,
+ ArtifactRepository localRepository,
+ List remoteRepositories )
+ throws InvalidPluginException;
+
+ /**
+ * @param pluginProject
+ * @todo would be better to store this in the plugin descriptor, but then it won't be available to the version
+ * manager which executes before the plugin is instantiated
+ */
+ void checkRequiredMavenVersion( Plugin plugin,
+ MavenProject pluginProject,
+ ArtifactRepository localRepository,
+ List remoteRepositories )
+ throws PluginVersionResolutionException, InvalidPluginException;
+
+ void checkPluginDependencySpec( Plugin plugin,
+ MavenProject pluginProject )
+ throws InvalidPluginException;
+
+ PluginDescriptor loadIsolatedPluginDescriptor( Plugin plugin,
+ MavenProject project,
+ MavenSession session );
+
+}
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerSupport.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerSupport.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/DefaultPluginLoader.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/DefaultPluginLoader.java?rev=617293&r1=617292&r2=617293&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/DefaultPluginLoader.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/DefaultPluginLoader.java Thu Jan 31 15:29:18 2008
@@ -8,23 +8,16 @@
import org.apache.maven.model.Plugin;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.plugin.InvalidPluginException;
-import org.apache.maven.plugin.MavenPluginCollector;
import org.apache.maven.plugin.PluginManager;
import org.apache.maven.plugin.PluginManagerException;
-import org.apache.maven.plugin.PluginMappingManager;
import org.apache.maven.plugin.PluginNotFoundException;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.plugin.version.PluginVersionNotFoundException;
import org.apache.maven.plugin.version.PluginVersionResolutionException;
import org.apache.maven.project.MavenProject;
-import org.apache.maven.settings.Settings;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
/**
* Responsible for loading plugins, reports, and any components contained therein. Will resolve
* plugin versions and plugin prefixes as necessary for plugin resolution.
@@ -41,10 +34,6 @@
// FIXME: Move the functionality used from this into the PluginLoader when PluginManager refactor is complete.
private PluginManager pluginManager;
- private PluginMappingManager pluginMappingManager;
-
- private MavenPluginCollector pluginCollector;
-
/**
* Load the {@link PluginDescriptor} instance for the plugin implied by the specified MojoBinding,
* using the project for {@link ArtifactRepository} and other supplemental plugin information as
@@ -68,117 +57,6 @@
mojoBinding.setGroupId( pluginDescriptor.getGroupId() );
mojoBinding.setArtifactId( pluginDescriptor.getArtifactId() );
mojoBinding.setVersion( pluginDescriptor.getVersion() );
- }
-
- return pluginDescriptor;
- }
-
- /**
- * Determine the appropriate {@link PluginDescriptor} instance for use with the specified plugin
- * prefix, using the following strategies (in order):
- * <br/>
- * <ol>
- * <li>Search for a plugin that has already been loaded with the specified prefix</li>
- * <li>Search for a plugin configured in the POM that has a matching prefix</li>
- * <li>Search the pluginGroups specified in the settings.xml for a matching plugin</li>
- * <li>Use groupId == org.apache.maven.plugins, and artifactId == maven-<prefix>-plugin,
- * and try to resolve based on that.</li>
- * </ol>
- */
- public PluginDescriptor findPluginForPrefix( String prefix, MavenProject project, MavenSession session )
- throws PluginLoaderException
- {
- Set descriptors = pluginCollector.getPluginDescriptorsForPrefix( prefix );
- Map projectPluginMap = project.getBuild().getPluginsAsMap();
-
- PluginDescriptor pluginDescriptor = null;
- if ( descriptors != null )
- {
- for ( Iterator it = descriptors.iterator(); it.hasNext(); )
- {
- PluginDescriptor pd = (PluginDescriptor) it.next();
-
- Plugin projectPlugin = (Plugin) projectPluginMap.get( pd.getPluginLookupKey() );
- if ( ( projectPlugin != null ) && ( projectPlugin.getVersion() != null ) && projectPlugin.getVersion().equals( pd.getVersion() ) )
- {
- pluginDescriptor = pd;
- break;
- }
- }
- }
-
- if ( pluginDescriptor == null )
- {
- pluginDescriptor = loadFromProject( prefix, project, session );
- }
-
- if ( pluginDescriptor == null )
- {
- pluginDescriptor = loadByPrefix( prefix, project, session );
- }
-
- if ( pluginDescriptor == null )
- {
- Plugin plugin = new Plugin();
- plugin.setArtifactId( PluginDescriptor.getDefaultPluginArtifactId( prefix ) );
-
- pluginDescriptor = loadPlugin( plugin, project, session );
- }
-
- if ( pluginDescriptor == null )
- {
- throw new PluginLoaderException( "Cannot find plugin with prefix: " + prefix );
- }
-
- return pluginDescriptor;
- }
-
- /**
- * Look for a plugin configured in the current project that has a prefix matching the one
- * specified. Return the {@link PluginDescriptor} if a match is found.
- */
- private PluginDescriptor loadFromProject( String prefix, MavenProject project, MavenSession session )
- throws PluginLoaderException
- {
- PluginDescriptor result = null;
-
- for ( Iterator it = project.getBuildPlugins().iterator(); it.hasNext(); )
- {
- Plugin plugin = (Plugin) it.next();
-
- PluginDescriptor pluginDescriptor = loadPlugin( plugin, project, session );
- if ( prefix.equals( pluginDescriptor.getGoalPrefix() ) )
- {
- result = pluginDescriptor;
- break;
- }
- }
-
- return result;
- }
-
- /**
- * Look for a plugin in the pluginGroups specified in the settings.xml that has a prefix
- * matching the one specified. Return the {@link PluginDescriptor} if a match is found.
- */
- private PluginDescriptor loadByPrefix( String prefix, MavenProject project, MavenSession session )
- throws PluginLoaderException
- {
- Settings settings = session.getSettings();
-
- Plugin plugin = pluginMappingManager.getByPrefix( prefix, settings.getPluginGroups(),
- project.getRemoteArtifactRepositories(), session.getLocalRepository() );
-
- PluginDescriptor pluginDescriptor = null;
- if ( plugin != null )
- {
- Plugin projectPlugin = (Plugin) project.getBuild().getPluginsAsMap().get( plugin.getKey() );
- if ( ( projectPlugin != null ) && ( projectPlugin.getVersion() != null ) )
- {
- plugin.setVersion( projectPlugin.getVersion() );
- }
-
- pluginDescriptor = loadPlugin( plugin, project, session );
}
return pluginDescriptor;
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/DefaultPluginPrefixLoader.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/DefaultPluginPrefixLoader.java?rev=617293&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/DefaultPluginPrefixLoader.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/DefaultPluginPrefixLoader.java Thu Jan 31 15:29:18 2008
@@ -0,0 +1,182 @@
+package org.apache.maven.plugin.loader;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.MavenPluginCollector;
+import org.apache.maven.plugin.PluginManagerSupport;
+import org.apache.maven.plugin.PluginMappingManager;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.logging.LogEnabled;
+import org.codehaus.plexus.logging.Logger;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+public class DefaultPluginPrefixLoader
+ implements PluginPrefixLoader, LogEnabled
+{
+
+ private Logger logger;
+
+ private PluginMappingManager pluginMappingManager;
+
+ private MavenPluginCollector pluginCollector;
+
+ private PluginManagerSupport pluginManagerSupport;
+
+ /**
+ * Determine the appropriate {@link PluginDescriptor} instance for use with the specified plugin
+ * prefix, using the following strategies (in order):
+ * <br/>
+ * <ol>
+ * <li>Search for a plugin that has already been loaded with the specified prefix</li>
+ * <li>Search for a plugin configured in the POM that has a matching prefix</li>
+ * <li>Search the pluginGroups specified in the settings.xml for a matching plugin</li>
+ * <li>Use groupId == org.apache.maven.plugins, and artifactId == maven-<prefix>-plugin,
+ * and try to resolve based on that.</li>
+ * </ol>
+ */
+ public Plugin findPluginForPrefix( String prefix,
+ MavenProject project,
+ MavenSession session )
+ throws PluginLoaderException
+ {
+ Set descriptors = pluginCollector.getPluginDescriptorsForPrefix( prefix );
+ Map projectPluginMap = project.getBuild().getPluginsAsMap();
+
+ Plugin plugin = null;
+
+ if ( descriptors != null )
+ {
+ PluginDescriptor pluginDescriptor = null;
+
+ for ( Iterator it = descriptors.iterator(); it.hasNext(); )
+ {
+ PluginDescriptor pd = (PluginDescriptor) it.next();
+
+ Plugin projectPlugin = (Plugin) projectPluginMap.get( pd.getPluginLookupKey() );
+ if ( ( projectPlugin != null ) && ( projectPlugin.getVersion() != null )
+ && projectPlugin.getVersion().equals( pd.getVersion() ) )
+ {
+ pluginDescriptor = pd;
+ break;
+ }
+ }
+
+ plugin = toPlugin( pluginDescriptor );
+ }
+
+ if ( plugin == null )
+ {
+ PluginDescriptor pluginDescriptor = loadFromProjectForPrefixQuery( prefix, project, session );
+
+ plugin = toPlugin( pluginDescriptor );
+ }
+
+ if ( plugin == null )
+ {
+ plugin = loadFromPrefixMapper( prefix, project, session );
+ }
+
+
+ if ( plugin == null )
+ {
+ plugin = new Plugin();
+ plugin.setArtifactId( PluginDescriptor.getDefaultPluginArtifactId( prefix ) );
+
+ PluginDescriptor pluginDescriptor = pluginManagerSupport.loadIsolatedPluginDescriptor( plugin,
+ project,
+ session );
+ plugin = toPlugin( pluginDescriptor );
+ }
+
+ if ( plugin == null )
+ {
+ throw new PluginLoaderException( "Cannot find plugin with prefix: " + prefix );
+ }
+
+ return plugin;
+ }
+
+ private Plugin toPlugin( PluginDescriptor pluginDescriptor )
+ {
+ if ( pluginDescriptor == null )
+ {
+ return null;
+ }
+
+ Plugin plugin = new Plugin();
+
+ plugin.setGroupId( pluginDescriptor.getGroupId() );
+ plugin.setArtifactId( pluginDescriptor.getArtifactId() );
+ plugin.setVersion( pluginDescriptor.getVersion() );
+
+ return plugin;
+ }
+
+ /**
+ * Look for a plugin configured in the current project that has a prefix matching the one
+ * specified. Return the {@link PluginDescriptor} if a match is found.
+ */
+ private PluginDescriptor loadFromProjectForPrefixQuery( String prefix,
+ MavenProject project,
+ MavenSession session )
+ throws PluginLoaderException
+ {
+ PluginDescriptor result = null;
+
+ for ( Iterator it = project.getBuildPlugins().iterator(); it.hasNext(); )
+ {
+ Plugin plugin = (Plugin) it.next();
+
+ PluginDescriptor pluginDescriptor = pluginManagerSupport.loadIsolatedPluginDescriptor( plugin,
+ project,
+ session );
+
+ if ( ( pluginDescriptor != null ) && prefix.equals( pluginDescriptor.getGoalPrefix() ) )
+ {
+ result = pluginDescriptor;
+ break;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Look for a plugin in the pluginGroups specified in the settings.xml that has a prefix
+ * matching the one specified. Return the {@link PluginDescriptor} if a match is found.
+ */
+ private Plugin loadFromPrefixMapper( String prefix,
+ MavenProject project,
+ MavenSession session )
+ throws PluginLoaderException
+ {
+ Settings settings = session.getSettings();
+
+ Plugin plugin = pluginMappingManager.getByPrefix( prefix,
+ settings.getPluginGroups(),
+ project.getRemoteArtifactRepositories(),
+ session.getLocalRepository() );
+
+ if ( plugin != null )
+ {
+ Plugin projectPlugin = (Plugin) project.getBuild().getPluginsAsMap().get( plugin.getKey() );
+ if ( ( projectPlugin != null ) && ( projectPlugin.getVersion() != null ) )
+ {
+ plugin.setVersion( projectPlugin.getVersion() );
+ }
+ }
+
+ return plugin;
+ }
+
+ public void enableLogging( Logger logger )
+ {
+ this.logger = logger;
+ }
+
+}
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/DefaultPluginPrefixLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/DefaultPluginPrefixLoader.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/PluginLoader.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/PluginLoader.java?rev=617293&r1=617292&r2=617293&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/PluginLoader.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/PluginLoader.java Thu Jan 31 15:29:18 2008
@@ -48,19 +48,4 @@
PluginDescriptor loadReportPlugin( MojoBinding mojoBinding, MavenProject project, MavenSession session )
throws PluginLoaderException;
- /**
- * Determine the appropriate {@link PluginDescriptor} instance for use with the specified plugin
- * prefix, using the following strategies (in order):
- * <br/>
- * <ol>
- * <li>Search for a plugin that has already been loaded with the specified prefix</li>
- * <li>Search for a plugin configured in the POM that has a matching prefix</li>
- * <li>Search the pluginGroups specified in the settings.xml for a matching plugin</li>
- * <li>Use groupId == org.apache.maven.plugins, and artifactId == maven-<prefix>-plugin,
- * and try to resolve based on that.</li>
- * </ol>
- */
- PluginDescriptor findPluginForPrefix( String prefix, MavenProject project, MavenSession session )
- throws PluginLoaderException;
-
}
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/PluginPrefixLoader.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/PluginPrefixLoader.java?rev=617293&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/PluginPrefixLoader.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/PluginPrefixLoader.java Thu Jan 31 15:29:18 2008
@@ -0,0 +1,25 @@
+package org.apache.maven.plugin.loader;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.project.MavenProject;
+
+public interface PluginPrefixLoader
+{
+
+ /**
+ * Determine the appropriate {@link Plugin} instance for use with the specified plugin
+ * prefix, using the following strategies (in order):
+ * <br/>
+ * <ol>
+ * <li>Search for a plugin that has already been loaded with the specified prefix</li>
+ * <li>Search for a plugin configured in the POM that has a matching prefix</li>
+ * <li>Search the pluginGroups specified in the settings.xml for a matching plugin</li>
+ * <li>Use groupId == org.apache.maven.plugins, and artifactId == maven-<prefix>-plugin,
+ * and try to resolve based on that.</li>
+ * </ol>
+ */
+ Plugin findPluginForPrefix( String prefix, MavenProject project, MavenSession session )
+ throws PluginLoaderException;
+
+}
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/PluginPrefixLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/loader/PluginPrefixLoader.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml?rev=617293&r1=617292&r2=617293&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml Thu Jan 31 15:29:18 2008
@@ -210,6 +210,9 @@
<implementation>org.apache.maven.plugin.DefaultPluginManager</implementation>
<requirements>
<requirement>
+ <role>org.apache.maven.plugin.PluginManagerSupport</role>
+ </requirement>
+ <requirement>
<role>org.apache.maven.ArtifactFilterManager</role>
</requirement>
<requirement>
@@ -690,10 +693,21 @@
<implementation>org.apache.maven.plugin.loader.DefaultPluginLoader</implementation>
<requirements>
<requirement>
- <role>org.apache.maven.plugin.MavenPluginCollector</role>
+ <role>org.apache.maven.plugin.PluginManager</role>
+ </requirement>
+ </requirements>
+ </component>
+
+ <component>
+ <role>org.apache.maven.plugin.loader.PluginPrefixLoader</role>
+ <role-hint>default</role-hint>
+ <implementation>org.apache.maven.plugin.loader.DefaultPluginPrefixLoader</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.plugin.PluginManagerSupport</role>
</requirement>
<requirement>
- <role>org.apache.maven.plugin.PluginManager</role>
+ <role>org.apache.maven.plugin.MavenPluginCollector</role>
</requirement>
<requirement>
<role>org.apache.maven.plugin.PluginMappingManager</role>
@@ -821,7 +835,7 @@
<implementation>org.apache.maven.lifecycle.binding.DefaultMojoBindingFactory</implementation>
<requirements>
<requirement>
- <role>org.apache.maven.plugin.loader.PluginLoader</role>
+ <role>org.apache.maven.plugin.loader.PluginPrefixLoader</role>
</requirement>
</requirements>
</component>
@@ -847,6 +861,29 @@
<requirements>
<requirement>
<role>org.apache.maven.settings.validation.SettingsValidator</role>
+ </requirement>
+ </requirements>
+ </component>
+
+ <component>
+ <role>org.apache.maven.plugin.PluginManagerSupport</role>
+ <role-hint>default</role-hint>
+ <implementation>org.apache.maven.plugin.DefaultPluginManagerSupport</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.plugin.version.PluginVersionManager</role>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.artifact.resolver.ArtifactResolver</role>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.project.MavenProjectBuilder</role>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.execution.RuntimeInformation</role>
</requirement>
</requirements>
</component>
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/realm/DefaultMavenRealmManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/realm/DefaultMavenRealmManager.java?rev=617293&r1=617292&r2=617293&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/realm/DefaultMavenRealmManager.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/realm/DefaultMavenRealmManager.java Thu Jan 31 15:29:18 2008
@@ -28,14 +28,10 @@
import org.codehaus.plexus.classworlds.realm.DuplicateRealmException;
import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
import org.codehaus.plexus.component.discovery.ComponentDiscoverer;
-import org.codehaus.plexus.component.discovery.ComponentDiscovererManager;
-import org.codehaus.plexus.component.discovery.ComponentDiscoveryEvent;
-import org.codehaus.plexus.component.discovery.ComponentDiscoveryListener;
import org.codehaus.plexus.component.discovery.DefaultComponentDiscoverer;
import org.codehaus.plexus.component.repository.ComponentDescriptor;
import org.codehaus.plexus.component.repository.ComponentSetDescriptor;
import org.codehaus.plexus.component.repository.exception.ComponentRepositoryException;
-import org.codehaus.plexus.configuration.PlexusConfigurationException;
import org.codehaus.plexus.logging.Logger;
import java.net.MalformedURLException;
@@ -152,106 +148,53 @@
throw new RealmManagementException( extensionRealmId, "Cannot import project extensions; extension artifact has no associated file that can be scanned for extension components (extension: " + extensionArtifact.getId() + ")" );
}
- ClassWorld discoveryWorld = new ClassWorld();
- List componentSetDescriptors;
- try
- {
- // Create an entire new ClassWorld, ClassRealm for discovering
- // the immediate components of the extension artifact, so we don't pollute the
- // container with component descriptors or realms that don't have any meaning beyond discovery.
- ClassRealm discoveryRealm;
- try
- {
- discoveryRealm = discoveryWorld.newRealm( "discovery: " + extensionRealmId );
- }
- catch ( DuplicateRealmException e )
- {
- throw new RealmManagementException( extensionRealmId, "Unable to create temporary ClassRealm for local-component discovery.", e );
- }
+ ComponentDiscoverer discoverer = new DefaultComponentDiscoverer();
+ discoverer.setManager( RealmScanningUtils.getDummyComponentDiscovererManager() );
- try
- {
- discoveryRealm.addURL( extensionArtifact.getFile().toURL() );
- }
- catch ( MalformedURLException e )
- {
- throw new RealmManagementException( extensionRealmId, extensionArtifact, "Unable to generate URL from extension artifact file: " + extensionArtifact.getFile() + " for local-component discovery.", e );
- }
-
- ComponentDiscoverer discoverer = new DefaultComponentDiscoverer();
- discoverer.setManager( new DummyDiscovererManager() );
-
- try
- {
- // Find the extension component descriptors that exist ONLY in the immediate extension
- // artifact...this prevents us from adding plexus-archiver components to the mix, for instance,
- // when the extension uses that dependency.
- componentSetDescriptors = discoverer.findComponents( container.getContext(), discoveryRealm );
- }
- catch ( PlexusConfigurationException e )
- {
- throw new RealmManagementException( extensionRealmId, "Unable to discover components in extension artifact: " + extensionArtifact.getId(), e );
- }
+ List componentSetDescriptors = RealmScanningUtils.scanForComponentSetDescriptors( extensionArtifact, discoverer, container.getContext(), extensionRealmId );
- ClassRealm realm = getProjectRealm( projectGroupId, projectArtifactId, projectVersion, true );
+ ClassRealm realm = getProjectRealm( projectGroupId, projectArtifactId, projectVersion, true );
- for ( Iterator it = componentSetDescriptors.iterator(); it.hasNext(); )
- {
- ComponentSetDescriptor compSet = (ComponentSetDescriptor) it.next();
- for ( Iterator compIt = compSet.getComponents().iterator(); compIt.hasNext(); )
- {
- // For each component in the extension artifact:
- ComponentDescriptor comp = (ComponentDescriptor) compIt.next();
- String implementation = comp.getImplementation();
-
- try
- {
- logger.debug( "Importing: " + implementation + "\nwith role: " + comp.getRole() + "\nand hint: " + comp.getRoleHint() + "\nfrom extension realm: " + extensionRealmId + "\nto project realm: " + realm.getId() );
-
- // Import the extension component's implementation class into the project-level
- // realm.
- realm.importFrom( extensionRealmId, implementation );
-
- // Set the realmId to be used in looking up this extension component to the
- // project-level realm, since we now have a restricted import
- // that allows most of the extension to stay hidden, and the
- // specific local extension components are still accessible
- // from the project-level realm.
- comp.setRealmId( realm.getId() );
-
- // Finally, add the extension component's descriptor (with projectRealm
- // set as the lookup realm) to the container.
- container.addComponentDescriptor( comp );
- }
- catch ( NoSuchRealmException e )
- {
- throw new RealmManagementException( extensionRealmId, "Failed to create import for component: " + implementation + " from extension realm: " + extensionRealmId + " to project realm: " + realm.getId(), e );
- }
- catch ( ComponentRepositoryException e )
- {
- String projectId = RealmUtils.createProjectId( projectGroupId, projectArtifactId, projectVersion );
- throw new RealmManagementException( extensionRealmId, "Unable to discover components from imports to project: " + projectId + " from extension artifact: " + extensionArtifact.getId(), e );
- }
- }
- }
- }
- finally
+ for ( Iterator it = componentSetDescriptors.iterator(); it.hasNext(); )
{
- Collection realms = discoveryWorld.getRealms();
- for ( Iterator it = realms.iterator(); it.hasNext(); )
+ ComponentSetDescriptor compSet = (ComponentSetDescriptor) it.next();
+ for ( Iterator compIt = compSet.getComponents().iterator(); compIt.hasNext(); )
{
- ClassRealm realm = (ClassRealm) it.next();
+ // For each component in the extension artifact:
+ ComponentDescriptor comp = (ComponentDescriptor) compIt.next();
+ String implementation = comp.getImplementation();
+
try
{
- discoveryWorld.disposeRealm( realm.getId() );
+ logger.debug( "Importing: " + implementation + "\nwith role: " + comp.getRole() + "\nand hint: " + comp.getRoleHint() + "\nfrom extension realm: " + extensionRealmId + "\nto project realm: " + realm.getId() );
+
+ // Import the extension component's implementation class into the project-level
+ // realm.
+ realm.importFrom( extensionRealmId, implementation );
+
+ // Set the realmId to be used in looking up this extension component to the
+ // project-level realm, since we now have a restricted import
+ // that allows most of the extension to stay hidden, and the
+ // specific local extension components are still accessible
+ // from the project-level realm.
+ comp.setRealmId( realm.getId() );
+
+ // Finally, add the extension component's descriptor (with projectRealm
+ // set as the lookup realm) to the container.
+ container.addComponentDescriptor( comp );
}
catch ( NoSuchRealmException e )
{
+ throw new RealmManagementException( extensionRealmId, "Failed to create import for component: " + implementation + " from extension realm: " + extensionRealmId + " to project realm: " + realm.getId(), e );
+ }
+ catch ( ComponentRepositoryException e )
+ {
+ String projectId = RealmUtils.createProjectId( projectGroupId, projectArtifactId, projectVersion );
+ throw new RealmManagementException( extensionRealmId, "Unable to discover components from imports to project: " + projectId + " from extension artifact: " + extensionArtifact.getId(), e );
}
}
}
-
}
public ClassRealm getProjectRealm( String projectGroupId, String projectArtifactId, String projectVersion )
@@ -285,42 +228,6 @@
}
return realm;
- }
-
- private static final class DummyDiscovererManager implements ComponentDiscovererManager
- {
-
- public void fireComponentDiscoveryEvent( ComponentDiscoveryEvent arg0 )
- {
- }
-
- public List getComponentDiscoverers()
- {
- return null;
- }
-
- public Map getComponentDiscoveryListeners()
- {
- return null;
- }
-
- public List getListeners()
- {
- return null;
- }
-
- public void initialize()
- {
- }
-
- public void registerComponentDiscoveryListener( ComponentDiscoveryListener l )
- {
- }
-
- public void removeComponentDiscoveryListener( ComponentDiscoveryListener l )
- {
- }
-
}
public ClassRealm getPluginRealm( Plugin plugin )
Added: maven/components/trunk/maven-project/src/main/java/org/apache/maven/realm/RealmScanningUtils.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/realm/RealmScanningUtils.java?rev=617293&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/realm/RealmScanningUtils.java (added)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/realm/RealmScanningUtils.java Thu Jan 31 15:29:18 2008
@@ -0,0 +1,130 @@
+package org.apache.maven.realm;
+
+import org.apache.maven.artifact.Artifact;
+import org.codehaus.plexus.classworlds.ClassWorld;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.classworlds.realm.DuplicateRealmException;
+import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
+import org.codehaus.plexus.component.discovery.ComponentDiscoverer;
+import org.codehaus.plexus.component.discovery.ComponentDiscovererManager;
+import org.codehaus.plexus.component.discovery.ComponentDiscoveryEvent;
+import org.codehaus.plexus.component.discovery.ComponentDiscoveryListener;
+import org.codehaus.plexus.configuration.PlexusConfigurationException;
+import org.codehaus.plexus.context.Context;
+
+import java.net.MalformedURLException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+public class RealmScanningUtils
+{
+
+ private static final String DISCOVERY_REALM_ID = "discovery realm";
+
+ public static List scanForComponentSetDescriptors( Artifact artifact,
+ ComponentDiscoverer discoverer,
+ Context context,
+ String discoveryContextId )
+ throws RealmManagementException
+ {
+ ClassWorld discoveryWorld = new ClassWorld();
+
+ List componentSetDescriptors;
+ try
+ {
+ // Create an entire new ClassWorld, ClassRealm for discovering
+ // the immediate components of the extension artifact, so we don't pollute the
+ // container with component descriptors or realms that don't have any meaning beyond discovery.
+ ClassRealm discoveryRealm;
+ try
+ {
+ discoveryRealm = discoveryWorld.newRealm( DISCOVERY_REALM_ID );
+ }
+ catch ( DuplicateRealmException e )
+ {
+ throw new RealmManagementException( discoveryContextId, "Unable to create temporary ClassRealm for local-component discovery.", e );
+ }
+
+ try
+ {
+ discoveryRealm.addURL( artifact.getFile().toURL() );
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new RealmManagementException( discoveryContextId, artifact, "Unable to generate URL from artifact file: " + artifact.getFile() + " for local-component discovery.", e );
+ }
+
+ try
+ {
+ // Find the extension component descriptors that exist ONLY in the immediate extension
+ // artifact...this prevents us from adding plexus-archiver components to the mix, for instance,
+ // when the extension uses that dependency.
+ componentSetDescriptors = discoverer.findComponents( context, discoveryRealm );
+ }
+ catch ( PlexusConfigurationException e )
+ {
+ throw new RealmManagementException( discoveryContextId, "Unable to discover components in artifact: " + artifact.getId(), e );
+ }
+ }
+ finally
+ {
+ Collection realms = discoveryWorld.getRealms();
+ for ( Iterator it = realms.iterator(); it.hasNext(); )
+ {
+ ClassRealm realm = (ClassRealm) it.next();
+ try
+ {
+ discoveryWorld.disposeRealm( realm.getId() );
+ }
+ catch ( NoSuchRealmException e )
+ {
+ }
+ }
+ }
+
+ return componentSetDescriptors;
+ }
+
+ public static ComponentDiscovererManager getDummyComponentDiscovererManager()
+ {
+ return new DummyDiscovererManager();
+ }
+
+ private static final class DummyDiscovererManager implements ComponentDiscovererManager
+ {
+
+ public void fireComponentDiscoveryEvent( ComponentDiscoveryEvent arg0 )
+ {
+ }
+
+ public List getComponentDiscoverers()
+ {
+ return null;
+ }
+
+ public Map getComponentDiscoveryListeners()
+ {
+ return null;
+ }
+
+ public List getListeners()
+ {
+ return null;
+ }
+
+ public void initialize()
+ {
+ }
+
+ public void registerComponentDiscoveryListener( ComponentDiscoveryListener l )
+ {
+ }
+
+ public void removeComponentDiscoveryListener( ComponentDiscoveryListener l )
+ {
+ }
+
+ }
+}
Propchange: maven/components/trunk/maven-project/src/main/java/org/apache/maven/realm/RealmScanningUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-project/src/main/java/org/apache/maven/realm/RealmScanningUtils.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"