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/01/23 23:18:24 UTC

svn commit: r614708 - in /maven/components/trunk/maven-core/src/main: aspect/org/apache/maven/errors/ java/org/apache/maven/ java/org/apache/maven/errors/ java/org/apache/maven/lifecycle/ java/org/apache/maven/plugin/ java/org/apache/maven/plugin/version/

Author: jdcasey
Date: Wed Jan 23 14:18:23 2008
New Revision: 614708

URL: http://svn.apache.org/viewvc?rev=614708&view=rev
Log:
[MNG-3372] Improve error handling where a mojo is referenced but the plugin doesn't contain it (in direct-invocation cases), and fix plugin-version discovery where a plugin pom gives a maven prereq.

Modified:
    maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/InvalidTaskException.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorTips.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/TaskValidationResult.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java

Modified: maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj?rev=614708&r1=614707&r2=614708&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj (original)
+++ maven/components/trunk/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj Wed Jan 23 14:18:23 2008
@@ -13,6 +13,7 @@
 import org.apache.maven.plugin.loader.PluginLoader;
 import org.apache.maven.plugin.PluginExecutionException;
 import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.InvalidPluginException;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.lifecycle.model.MojoBinding;
@@ -62,6 +63,13 @@
         && args( binding, project, .. )
     {
         getReporter().reportErrorLoadingPlugin( binding, project, cause );
+    }
+
+    after( String task, MavenSession session, MavenProject project ) throwing ( InvalidPluginException cause ):
+        call( private * DefaultLifecycleExecutor.getMojoDescriptorForDirectInvocation( String, MavenSession, MavenProject ) )
+        && args( task, session, project )
+    {
+        getReporter().reportInvalidPluginForDirectInvocation( task, session, project, cause );
     }
 
     after( MojoBinding binding, MavenProject project ) throwing ( MojoExecutionException cause ):

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/InvalidTaskException.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/InvalidTaskException.java?rev=614708&r1=614707&r2=614708&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/InvalidTaskException.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/InvalidTaskException.java Wed Jan 23 14:18:23 2008
@@ -1,9 +1,6 @@
 package org.apache.maven;
 
-import org.apache.maven.lifecycle.LifecycleLoaderException;
-import org.apache.maven.lifecycle.LifecycleSpecificationException;
 import org.apache.maven.lifecycle.TaskValidationResult;
-import org.apache.maven.plugin.loader.PluginLoaderException;
 
 /**
  * Exception which occurs when a task or goal is specified on the command line
@@ -21,21 +18,7 @@
     private final String task;
 
     public InvalidTaskException( TaskValidationResult result,
-                                 LifecycleLoaderException cause )
-    {
-        super( result.getMessage(), cause );
-        task = result.getInvalidTask();
-    }
-
-    public InvalidTaskException( TaskValidationResult result,
-                                 LifecycleSpecificationException cause )
-    {
-        super( result.getMessage(), cause );
-        task = result.getInvalidTask();
-    }
-
-    public InvalidTaskException( TaskValidationResult result,
-                                 PluginLoaderException cause )
+                                 Throwable cause )
     {
         super( result.getMessage(), cause );
         task = result.getInvalidTask();

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java?rev=614708&r1=614707&r2=614708&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java Wed Jan 23 14:18:23 2008
@@ -20,6 +20,7 @@
 import org.apache.maven.lifecycle.model.MojoBinding;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.InvalidPluginException;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -124,5 +125,7 @@
     void reportUseOfBannedMojoParameter( Parameter currentParameter, MojoBinding binding, MavenProject project, String expression, String altExpression, ExpressionEvaluationException err );
 
     void reportMissingModulePom( MissingModuleException err );
+
+    void reportInvalidPluginForDirectInvocation( String task, MavenSession session, MavenProject project, InvalidPluginException err );
 
 }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorTips.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorTips.java?rev=614708&r1=614707&r2=614708&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorTips.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/CoreErrorTips.java Wed Jan 23 14:18:23 2008
@@ -6,10 +6,12 @@
 import org.apache.maven.artifact.resolver.AbstractArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.execution.MavenSession;
 import org.apache.maven.lifecycle.LifecycleException;
 import org.apache.maven.lifecycle.model.MojoBinding;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.InvalidPluginException;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.PluginConfigurationException;
 import org.apache.maven.plugin.PluginExecutionException;
@@ -302,6 +304,15 @@
     public static List getMissingModuleTips( File pomFile,
                                              File moduleFile,
                                              String moduleName )
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public static List getInvalidPluginForDirectInvocationTips( String task,
+                                                                MavenSession session,
+                                                                MavenProject project,
+                                                                InvalidPluginException err )
     {
         // TODO Auto-generated method stub
         return null;

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java?rev=614708&r1=614707&r2=614708&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java Wed Jan 23 14:18:23 2008
@@ -24,6 +24,7 @@
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.InvalidPluginException;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -1662,6 +1663,35 @@
         writer.write( NEWLINE );
 
         addTips( CoreErrorTips.getMissingModuleTips( err.getPomFile(), err.getModuleFile(), err.getModuleName() ), writer );
+
+        registerBuildError( err, writer.toString() );
+    }
+
+    public void reportInvalidPluginForDirectInvocation( String task,
+                                                        MavenSession session,
+                                                        MavenProject project,
+                                                        InvalidPluginException err )
+    {
+        StringWriter writer = new StringWriter();
+
+        writer.write( NEWLINE );
+        writer.write( "Maven encountered an error while loading a plugin for use in your build." );
+        writer.write( NEWLINE );
+        writer.write( NEWLINE );
+
+        writer.write( "Original task invocation:" );
+        writer.write( task );
+        writer.write( NEWLINE );
+        writer.write( NEWLINE );
+        writer.write( "While building project:" );
+        writeProjectCoordinate( project, writer );
+
+        writer.write( NEWLINE );
+        writer.write( NEWLINE );
+        writer.write( "Error message:" );
+        writer.write( err.getMessage() );
+
+        addTips( CoreErrorTips.getInvalidPluginForDirectInvocationTips( task, session, project, err ), writer );
 
         registerBuildError( err, writer.toString() );
     }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=614708&r1=614707&r2=614708&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Wed Jan 23 14:18:23 2008
@@ -34,6 +34,7 @@
 import org.apache.maven.lifecycle.plan.BuildPlanner;
 import org.apache.maven.monitor.event.EventDispatcher;
 import org.apache.maven.monitor.event.MavenEvents;
+import org.apache.maven.plugin.InvalidPluginException;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.PluginConfigurationException;
@@ -625,6 +626,12 @@
                         task,
                         message, e );
                 }
+                catch ( InvalidPluginException e )
+                {
+                    return new TaskValidationResult(
+                        task,
+                        e.getMessage(), e );
+                }
             }
         }
 
@@ -733,7 +740,8 @@
     private MojoDescriptor getMojoDescriptorForDirectInvocation( String task,
                                                                  MavenSession session,
                                                                  MavenProject project )
-        throws LifecycleSpecificationException, PluginLoaderException, LifecycleLoaderException
+        throws LifecycleSpecificationException, PluginLoaderException, LifecycleLoaderException,
+        InvalidPluginException
     {
         // we don't need to include report configuration here, since we're just looking for
         // an @aggregator flag...
@@ -749,6 +757,11 @@
             session );
 
         MojoDescriptor mojoDescriptor = descriptor.getMojo( binding.getGoal() );
+
+        if ( mojoDescriptor == null )
+        {
+            throw new InvalidPluginException( "Plugin: " + descriptor.getId() + " does not contain referenced mojo: " + binding.getGoal() );
+        }
 
         return mojoDescriptor;
     }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/TaskValidationResult.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/TaskValidationResult.java?rev=614708&r1=614707&r2=614708&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/TaskValidationResult.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/TaskValidationResult.java Wed Jan 23 14:18:23 2008
@@ -1,6 +1,7 @@
 package org.apache.maven.lifecycle;
 
 import org.apache.maven.InvalidTaskException;
+import org.apache.maven.plugin.InvalidPluginException;
 import org.apache.maven.plugin.loader.PluginLoaderException;
 
 /** @author Jason van Zyl */
@@ -43,6 +44,15 @@
         this.cause = cause;
     }
 
+    public TaskValidationResult( String task,
+                                 String message,
+                                 InvalidPluginException e )
+    {
+        invalidTask = task;
+        this.message = message;
+        cause = e;
+    }
+
     public String getInvalidTask()
     {
         return invalidTask;
@@ -65,23 +75,7 @@
 
     public InvalidTaskException generateInvalidTaskException()
     {
-        InvalidTaskException e = null;
-        if ( cause instanceof LifecycleLoaderException )
-        {
-            e = new InvalidTaskException( this, (LifecycleLoaderException)cause );
-        }
-        else if ( cause instanceof LifecycleSpecificationException )
-        {
-            e = new InvalidTaskException( this, (LifecycleSpecificationException)cause );
-        }
-        else if ( cause instanceof PluginLoaderException )
-        {
-            e = new InvalidTaskException( this, (PluginLoaderException)cause );
-        }
-        else
-        {
-            throw new IllegalStateException( "No matching constructor in InvalidTaskException for TaskValidationResult cause: " + cause + " ( invalid task: " + invalidTask + ")" );
-        }
+        InvalidTaskException e = new InvalidTaskException( this, cause );
 
         return e;
     }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java?rev=614708&r1=614707&r2=614708&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java Wed Jan 23 14:18:23 2008
@@ -41,4 +41,9 @@
         super( message, e );
     }
 
+    public InvalidPluginException( String message )
+    {
+        super( message );
+    }
+
 }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java?rev=614708&r1=614707&r2=614708&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java Wed Jan 23 14:18:23 2008
@@ -27,8 +27,8 @@
 import org.apache.maven.artifact.metadata.ResolutionGroup;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.versioning.ArtifactVersion;
-import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.Restriction;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.execution.RuntimeInformation;
@@ -226,13 +226,38 @@
                 // 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() );
+                    String mavenVersion = pluginProject.getPrerequisites().getMaven();
 
-                    if ( runtimeInformation.getApplicationVersion().compareTo( requiredVersion ) != 0 )
+                    VersionRange mavenRange = null;
+                    try
+                    {
+                        mavenRange = VersionRange.createFromVersionSpec( mavenVersion );
+
+                        List restrictions = mavenRange.getRestrictions();
+                        if ( ( restrictions.size() == 1 ) && Restriction.EVERYTHING.equals( restrictions.get( 0 ) ) )
+                        {
+                            String range = "[" + mavenVersion + ",]";
+
+                            getLogger().debug( "Plugin: "
+                                               + pluginProject.getId()
+                                               + " specifies a simple prerequisite Maven version of: "
+                                               + mavenVersion
+                                               + ". This version has been translated into the range: "
+                                               + range + " for plugin-version resolution purposes." );
+
+                            mavenRange = VersionRange.createFromVersionSpec( range );
+                        }
+                    }
+                    catch ( InvalidVersionSpecificationException e )
+                    {
+                        getLogger().debug( "Invalid prerequisite Maven version: " + mavenVersion + " for plugin: " + pluginProject.getId() +
+                                                                        e.getMessage() );
+                    }
+
+                    if ( ( mavenRange != null ) && !mavenRange.containsVersion( runtimeInformation.getApplicationVersion() ) )
                     {
                         getLogger().info( "Ignoring available plugin version: " + artifactVersion +
-                            " for: " + groupId + ":" + artifactId + " as it requires Maven version " + requiredVersion );
+                            " for: " + groupId + ":" + artifactId + " as it requires Maven version matching: " + mavenVersion );
 
                         VersionRange vr;
                         try