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