You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by si...@apache.org on 2009/02/02 12:50:19 UTC
svn commit: r739965 - in /maven/components/branches/sisbell-plugin-manager:
maven-core/src/main/java/org/apache/maven/plugin/
maven-core/src/main/resources/META-INF/plexus/
maven-embedder/src/main/java/org/apache/maven/embedder/
maven-project/src/main/...
Author: sisbell
Date: Mon Feb 2 11:50:18 2009
New Revision: 739965
URL: http://svn.apache.org/viewvc?rev=739965&view=rev
Log:
MNG-3631 - Get plugin config, including mojo descriptor info.
Added:
maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java
maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/PluginRepository.java
Modified:
maven/components/branches/sisbell-plugin-manager/maven-core/src/main/resources/META-INF/plexus/components.xml
maven/components/branches/sisbell-plugin-manager/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java
maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java
maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
maven/components/branches/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java
Added: maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java?rev=739965&view=auto
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java (added)
+++ maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java Mon Feb 2 11:50:18 2009
@@ -0,0 +1,58 @@
+package org.apache.maven.plugin;
+
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+
+import java.util.List;
+import java.io.StringReader;
+
+@Component( role = PluginRepository.class)
+public class DefaultPluginRepository implements PluginRepository
+{
+ @Requirement
+ protected MavenPluginCollector pluginCollector;
+
+ public Plugin findPluginById(String id, String mojoId) throws Exception
+ {
+ if(pluginCollector == null)
+ {
+ throw new IllegalArgumentException("pluginCollector: null");
+ }
+
+ if(id == null)
+ {
+ throw new IllegalArgumentException("id: null");
+ }
+
+ String[] token = id.split(":");
+ if(token.length != 3)
+ {
+ throw new IllegalArgumentException("id: does not include complete id");
+ }
+
+ Plugin plugin = new Plugin();
+ plugin.setGroupId(token[0]);
+ plugin.setArtifactId(token[1]);
+ plugin.setVersion(token[2]);
+
+ PluginDescriptor descriptor = pluginCollector.getPluginDescriptor(plugin);
+ if(descriptor == null)
+ {
+ return null;
+ }
+
+ for(MojoDescriptor mojo : (List<MojoDescriptor>) descriptor.getMojos())
+ {
+ if(mojo.getId().equals(id + ":"+ mojoId) && mojo.getMojoConfiguration() != null)
+ {
+ plugin.setConfiguration(Xpp3DomBuilder.build( new StringReader( mojo.getMojoConfiguration().toString() ) ));
+ }
+ }
+
+ return plugin;
+ }
+}
Added: maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/PluginRepository.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/PluginRepository.java?rev=739965&view=auto
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/PluginRepository.java (added)
+++ maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/PluginRepository.java Mon Feb 2 11:50:18 2009
@@ -0,0 +1,10 @@
+package org.apache.maven.plugin;
+
+import org.apache.maven.model.Plugin;
+import org.codehaus.plexus.configuration.PlexusConfigurationException;
+
+
+public interface PluginRepository {
+
+ Plugin findPluginById(String pluginId, String mojoId) throws Exception;
+}
Modified: maven/components/branches/sisbell-plugin-manager/maven-core/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-core/src/main/resources/META-INF/plexus/components.xml?rev=739965&r1=739964&r2=739965&view=diff
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-core/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/components/branches/sisbell-plugin-manager/maven-core/src/main/resources/META-INF/plexus/components.xml Mon Feb 2 11:50:18 2009
@@ -27,6 +27,16 @@
<component-set>
<components>
<component>
+ <role>org.apache.maven.plugin.PluginRepository</role>
+ <role-hint>default</role-hint>
+ <implementation>org.apache.maven.plugin.DefaultPluginRepository</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.plugin.MavenPluginCollector</role>
+ </requirement>
+ </requirements>
+ </component>
+ <component>
<role>org.apache.maven.lifecycle.binding.LifecycleBindingManager</role>
<role-hint>default</role-hint>
<implementation>org.apache.maven.lifecycle.binding.DefaultLifecycleBindingManager</implementation>
Modified: maven/components/branches/sisbell-plugin-manager/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java?rev=739965&r1=739964&r2=739965&view=diff
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java (original)
+++ maven/components/branches/sisbell-plugin-manager/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java Mon Feb 2 11:50:18 2009
@@ -58,18 +58,16 @@
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
import org.apache.maven.monitor.event.DefaultEventDispatcher;
import org.apache.maven.monitor.event.EventDispatcher;
-import org.apache.maven.plugin.InvalidPluginException;
-import org.apache.maven.plugin.MavenPluginCollector;
-import org.apache.maven.plugin.MavenPluginDiscoverer;
-import org.apache.maven.plugin.PluginManager;
-import org.apache.maven.plugin.PluginManagerException;
-import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.*;
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.MavenProjectBuildingResult;
import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.builder.ProjectBuilder;
+import org.apache.maven.project.builder.Mixer;
+import org.apache.maven.plugin.PluginRepository;
import org.apache.maven.reactor.MavenExecutionException;
import org.apache.maven.reactor.MissingModuleException;
import org.apache.maven.settings.Settings;
@@ -92,6 +90,7 @@
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.component.repository.exception.ComponentRepositoryException;
import org.codehaus.plexus.configuration.PlexusConfigurationException;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
import org.codehaus.plexus.logging.LoggerManager;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.ReaderFactory;
@@ -147,6 +146,10 @@
private MavenExecutionRequestPopulator populator;
private BuildPlanner buildPlanner;
+
+ private PluginRepository pluginRepository;
+
+ private Mixer mixer;
// ----------------------------------------------------------------------
// Configuration
@@ -246,6 +249,15 @@
modelWriter.write( writer, model );
}
+ public PlexusConfiguration getPluginConfiguration(String pluginId, String mojoId, Model model) throws Exception
+ {
+ try {
+ return mixer.mixPluginAndReturnConfig(pluginRepository.findPluginById(pluginId, mojoId), model);
+ } catch (PlexusConfigurationException e) {
+ throw new IOException(e.getMessage());
+ }
+ }
+
// ----------------------------------------------------------------------
// Settings
// ----------------------------------------------------------------------
@@ -656,6 +668,10 @@
artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
+ pluginRepository = container.lookup( PluginRepository.class );
+
+ mixer = (Mixer) container.lookup( ProjectBuilder.class );
+
// This is temporary as we can probably cache a single request and use it for default values and
// simply cascade values in from requests used for individual executions.
request = new DefaultMavenExecutionRequest();
Modified: maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java?rev=739965&r1=739964&r2=739965&view=diff
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java (original)
+++ maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java Mon Feb 2 11:50:18 2009
@@ -3,6 +3,7 @@
import org.apache.maven.project.MavenProject;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.Model;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
import java.io.IOException;
@@ -11,4 +12,6 @@
{
Model mixPlugin(Plugin plugin, Model model) throws IOException;
+
+ PlexusConfiguration mixPluginAndReturnConfig(Plugin plugin, Model model) throws IOException;
}
Modified: maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java?rev=739965&r1=739964&r2=739965&view=diff
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java (original)
+++ maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java Mon Feb 2 11:50:18 2009
@@ -36,6 +36,10 @@
public PluginMixin(Plugin plugin)
throws IOException
{
+ if(plugin == null)
+ {
+ throw new IllegalArgumentException("plugin: null");
+ }
Model model = new Model();
Build build = new Build();
build.addPlugin(plugin);
Modified: maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java?rev=739965&r1=739964&r2=739965&view=diff
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java (original)
+++ maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java Mon Feb 2 11:50:18 2009
@@ -39,12 +39,16 @@
import org.apache.maven.project.ProjectBuilderConfiguration;
import org.apache.maven.project.builder.*;
import org.apache.maven.shared.model.*;
+import org.apache.maven.shared.model.impl.DefaultModelDataSource;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.apache.maven.shared.model.ModelMarshaller;
/**
* Default implementation of the project builder.
@@ -385,4 +389,61 @@
// (new PluginMixin(plugin)).getInputStream(), ProjectUri.Build.Plugins.xUri, null);
}
+
+ public PlexusConfiguration mixPluginAndReturnConfig(Plugin plugin, Model model) throws IOException
+ {
+ List<DomainModel> domainModels = new ArrayList<DomainModel>();
+ domainModels.add( new PluginMixin(plugin) );
+ domainModels.add( new PomClassicDomainModel(model) );
+
+ PomClassicTransformer transformer = new PomClassicTransformer( new PomClassicDomainModelFactory() );
+
+ ModelTransformerContext ctx = new ModelTransformerContext(PomTransformer.MODEL_CONTAINER_INFOS );
+
+ PomClassicDomainModel transformedDomainModel = ( (PomClassicDomainModel) ctx.transform( domainModels,
+ transformer,
+ transformer,
+ Collections.EMPTY_LIST,
+ null,
+ listeners ) );
+ ModelDataSource source =
+ new DefaultModelDataSource(transformedDomainModel.getModelProperties(), PomTransformer.MODEL_CONTAINER_FACTORIES);
+ for(ModelContainer pluginContainer : source.queryFor(ProjectUri.Build.Plugins.Plugin.xUri))
+ {
+ if(matchesIdOfPlugin(pluginContainer, plugin))
+ {
+ List<ModelProperty> config = new ArrayList<ModelProperty>();
+ for(ModelProperty mp : pluginContainer.getProperties())
+ {
+ if(mp.getUri().startsWith(ProjectUri.Build.Plugins.Plugin.configuration))
+ {
+ config.add(mp);
+ }
+ }
+ return new XmlPlexusConfiguration(ModelMarshaller.unmarshalModelPropertiesToXml(config, ProjectUri.Build.Plugins.Plugin.xUri));
+
+ }
+ }
+ return null;
+ }
+
+ private static boolean matchesIdOfPlugin(ModelContainer mc, Plugin plugin)
+ {
+ List<ModelProperty> props = mc.getProperties();
+ return getValueByUri(ProjectUri.Build.Plugins.Plugin.groupId, props).equals(plugin.getGroupId())
+ && getValueByUri(ProjectUri.Build.Plugins.Plugin.artifactId, props).equals(plugin.getArtifactId())
+ && getValueByUri(ProjectUri.Build.Plugins.Plugin.version, props).equals(plugin.getVersion());
+ }
+
+ private static String getValueByUri(String uri, List<ModelProperty> modelProperties)
+ {
+ for(ModelProperty mp : modelProperties)
+ {
+ if(mp.getUri().equals(uri))
+ {
+ return mp.getResolvedValue();
+ }
+ }
+ return "";
+ }
}
Modified: maven/components/branches/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java?rev=739965&r1=739964&r2=739965&view=diff
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java (original)
+++ maven/components/branches/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java Mon Feb 2 11:50:18 2009
@@ -33,15 +33,19 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.project.harness.PomTestWrapper;
import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
public class PomConstructionTest
extends PlexusTestCase
{
- private static String BASE_POM_DIR = "src/test/resources-project-builder";
+ private static String BASE_DIR = "src/test";
- private static String BASE_MIXIN_DIR = "src/test/resources-mixins";
+ private static String BASE_POM_DIR = BASE_DIR + "/resources-project-builder";
+
+ private static String BASE_MIXIN_DIR = BASE_DIR + "/resources-mixins";
private ProjectBuilder projectBuilder;