Author: brett Date: Tue Mar 17 02:28:26 2009 New Revision: 755086 URL: http://svn.apache.org/viewvc?rev=755086&view=rev Log: [MNG-4091] Validate the plugin descriptors and improve error reporting when mismatched with artifact
Added: maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java (contents, props changed) - copied, changed from r755055, maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java Modified: maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Modified: maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=755086&r1=755085&r2=755086&view=diff ============================================================================== --- maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (original) +++ maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Tue Mar 17 02:28:26 2009 @@ -69,6 +69,7 @@ import org.codehaus.plexus.component.configurator.ConfigurationListener; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator; +import org.codehaus.plexus.component.discovery.ComponentDiscoveryListener; import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.configuration.PlexusConfiguration; @@ -84,6 +85,7 @@ import java.io.File; import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -296,10 +298,26 @@ try { - child = container.createChildContainer( PluginUtils.constructVersionedKey( plugin ).intern(), + MavenPluginValidator validator = new MavenPluginValidator( pluginArtifact ); + + String key = PluginUtils.constructVersionedKey( plugin ).intern(); + child = container.createChildContainer( key, Collections.singletonList( pluginArtifact.getFile() ), Collections.EMPTY_MAP, - Collections.singletonList( pluginCollector ) ); + Arrays.asList( new ComponentDiscoveryListener[] { validator, pluginCollector } ) ); + + if ( validator.hasErrors() ) + { + String msg = "Plugin '" + key + "' has an invalid descriptor:"; + int count = 1; + for ( Iterator i = validator.getErrors().iterator(); i.hasNext(); ) + { + msg += "\n" + count + ") " + i.next(); + count++; + } + throw new PluginManagerException( msg ); + } + try { child.getContainerRealm().importFrom( "plexus.core", "org.codehaus.plexus.util.xml.Xpp3Dom" ); Copied: maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java (from r755055, maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java) URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java?p2=maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java&p1=maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java&r1=755055&r2=755086&rev=755086&view=diff ============================================================================== --- maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java (original) +++ maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java Tue Mar 17 02:28:26 2009 @@ -19,33 +19,27 @@ * under the License. */ -import org.apache.maven.model.Plugin; +import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.codehaus.plexus.component.discovery.ComponentDiscoveryEvent; import org.codehaus.plexus.component.discovery.ComponentDiscoveryListener; import org.codehaus.plexus.component.repository.ComponentSetDescriptor; -import org.codehaus.plexus.logging.AbstractLogEnabled; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; +import java.util.ArrayList; +import java.util.List; -public class MavenPluginCollector - extends AbstractLogEnabled +public class MavenPluginValidator implements ComponentDiscoveryListener { + private final Artifact pluginArtifact; - private Set pluginsInProcess = new HashSet(); + private List/*<String>*/ errors = new ArrayList/*<String>*/(); - private Map pluginDescriptors = new HashMap(); - - private Map pluginIdsByPrefix = new HashMap(); + public MavenPluginValidator( Artifact pluginArtifact ) + { + this.pluginArtifact = pluginArtifact; + } - // ---------------------------------------------------------------------- - // Mojo discovery - // ---------------------------------------------------------------------- public void componentDiscovered( ComponentDiscoveryEvent event ) { ComponentSetDescriptor componentSetDescriptor = event.getComponentSetDescriptor(); @@ -54,56 +48,31 @@ { PluginDescriptor pluginDescriptor = (PluginDescriptor) componentSetDescriptor; - String key = PluginUtils.constructVersionedKey( pluginDescriptor ); + if ( !pluginArtifact.getGroupId().equals( pluginDescriptor.getGroupId() ) ) + { + errors.add( "Plugin's descriptor contains the wrong group ID: " + pluginDescriptor.getGroupId() ); + } - if ( !pluginsInProcess.contains( key ) ) + if ( !pluginArtifact.getArtifactId().equals( pluginDescriptor.getArtifactId() ) ) { - pluginsInProcess.add( key ); - - pluginDescriptors.put( key, pluginDescriptor ); - - // TODO: throw an (not runtime) exception if there is a prefix overlap - means doing so elsewhere - // we also need to deal with multiple versions somehow - currently, first wins - if ( !pluginIdsByPrefix.containsKey( pluginDescriptor.getGoalPrefix() ) ) - { - pluginIdsByPrefix.put( pluginDescriptor.getGoalPrefix(), pluginDescriptor ); - } + errors.add( "Plugin's descriptor contains the wrong artifact ID: " + pluginDescriptor.getArtifactId() ); + } + + if ( !pluginArtifact.getBaseVersion().equals( pluginDescriptor.getVersion() ) ) + { + errors.add( "Plugin's descriptor contains the wrong version: " + pluginDescriptor.getVersion() ); } } } - public PluginDescriptor getPluginDescriptor( Plugin plugin ) + public boolean hasErrors() { - String key = PluginUtils.constructVersionedKey( plugin ); - return (PluginDescriptor) pluginDescriptors.get( key ); + return !errors.isEmpty(); } - public boolean isPluginInstalled( Plugin plugin ) + public List/*<String>*/ getErrors() { - String key = PluginUtils.constructVersionedKey( plugin ); - return pluginDescriptors.containsKey( key ); + return errors; } - - public PluginDescriptor getPluginDescriptorForPrefix( String prefix ) - { - return (PluginDescriptor) pluginIdsByPrefix.get( prefix ); - } - - public void flushPluginDescriptor( Plugin plugin ) - { - String key = PluginUtils.constructVersionedKey( plugin ); - pluginsInProcess.remove( key ); - pluginDescriptors.remove( key ); - - for ( Iterator it = pluginIdsByPrefix.entrySet().iterator(); it.hasNext(); ) - { - Map.Entry entry = (Map.Entry) it.next(); - - if ( key.equals( PluginUtils.constructVersionedKey( (PluginDescriptor) entry.getValue() ) ) ) - { - it.remove(); - } - } - } - } + Propchange: maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Tue Mar 17 02:28:26 2009 @@ -0,0 +1,7 @@ +/maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:679193-679867,680477-688882,708790-728809,728834 +/maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:679552-679867,693956-728820,728836,728940,729060,729738,729785,730461,730631,734502,734803,736543,746381 +/maven/components/branches/maven-2.1.0-M1-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:690315,691793-694304 +/maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:688883,689695,689976,689990 +/maven/components/branches/maven-2.1.x/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:751686,753648,754505,754542 +/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:572229,720001,721902,726845,729292 +/maven/sandbox/branches/maven/MNG-3379/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:678167