diff --git a/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java b/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java
index 6bc7663a67..0ba96e632b 100755
--- a/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java
+++ b/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java
@@ -32,6 +32,7 @@ import org.apache.maven.artifact.resolver.filter.TypeArtifactFilter;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Repository;
import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
import org.apache.maven.project.artifact.MavenMetadataSource;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
@@ -172,6 +173,10 @@ public class DependenciesTask
// TODO: improve handling
throw new BuildException( "Unable to locate artifact", e );
}
+ catch ( InvalidDependencyVersionException e )
+ {
+ throw new BuildException( e.getMessage(), e );
+ }
if ( pathId != null && getProject().getReference( pathId ) != null )
{
diff --git a/maven-core/src/main/java/org/apache/maven/BuildFailureException.java b/maven-core/src/main/java/org/apache/maven/BuildFailureException.java
index b21559cb65..fd772a8bd0 100644
--- a/maven-core/src/main/java/org/apache/maven/BuildFailureException.java
+++ b/maven-core/src/main/java/org/apache/maven/BuildFailureException.java
@@ -23,7 +23,7 @@ package org.apache.maven;
* @version $Id$
*/
public class BuildFailureException
- extends Throwable
+ extends Exception
{
public BuildFailureException( String message )
{
diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
index 0b8c084c25..52d275e310 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -196,6 +196,10 @@ public class DefaultMaven
{
return dispatchErrorResponse( dispatcher, event, request.getBaseDirectory(), e );
}
+ catch ( BuildFailureException e )
+ {
+ return dispatchErrorResponse( dispatcher, event, request.getBaseDirectory(), e );
+ }
ReactorManager rm;
try
@@ -409,7 +413,7 @@ public class DefaultMaven
private List collectProjects( List files, ArtifactRepository localRepository, boolean recursive, Settings settings,
ProfileManager globalProfileManager, boolean isRoot )
throws ArtifactResolutionException, ProjectBuildingException, ProfileActivationException,
- MavenExecutionException
+ MavenExecutionException, BuildFailureException
{
List projects = new ArrayList( files.size() );
@@ -435,17 +439,10 @@ public class DefaultMaven
if ( project.getPrerequisites() != null && project.getPrerequisites().getMaven() != null )
{
DefaultArtifactVersion version = new DefaultArtifactVersion( project.getPrerequisites().getMaven() );
- try
+ if ( runtimeInformation.getApplicationVersion().compareTo( version ) < 0 )
{
- if ( runtimeInformation.getApplicationVersion().compareTo( version ) < 0 )
- {
- throw new ProjectBuildingException( project.getId(), "Unable to build project '" +
- project.getFile() + "; it requires Maven version " + version.toString() );
- }
- }
- catch ( IOException e )
- {
- throw new MavenExecutionException( "Unable to get Maven application version", e );
+ throw new BuildFailureException( "Unable to build project '" + project.getFile() +
+ "; it requires Maven version " + version.toString() );
}
}
diff --git a/maven-core/src/main/java/org/apache/maven/execution/DefaultRuntimeInformation.java b/maven-core/src/main/java/org/apache/maven/execution/DefaultRuntimeInformation.java
index 59b04e4e33..bb40ebb9ad 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/DefaultRuntimeInformation.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/DefaultRuntimeInformation.java
@@ -18,10 +18,12 @@ package org.apache.maven.execution;
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.codehaus.plexus.util.IOUtil;
-import java.io.InputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.util.Properties;
/**
@@ -31,30 +33,41 @@ import java.util.Properties;
* @version $Id$
*/
public class DefaultRuntimeInformation
- implements RuntimeInformation
+ implements RuntimeInformation, Initializable
{
private ArtifactVersion applicationVersion;
public ArtifactVersion getApplicationVersion()
- throws IOException
{
- if ( applicationVersion == null )
- {
- InputStream resourceAsStream = null;
- try
- {
- Properties properties = new Properties();
- resourceAsStream = getClass().getClassLoader().getResourceAsStream(
- "META-INF/maven/org.apache.maven/maven-core/pom.properties" );
- properties.load( resourceAsStream );
-
- applicationVersion = new DefaultArtifactVersion( properties.getProperty( "version" ) );
- }
- finally
- {
- IOUtil.close( resourceAsStream );
- }
- }
return applicationVersion;
}
+
+ public void initialize()
+ throws InitializationException
+ {
+ InputStream resourceAsStream = null;
+ try
+ {
+ Properties properties = new Properties();
+ resourceAsStream = getClass().getClassLoader().getResourceAsStream(
+ "META-INF/maven/org.apache.maven/maven-core/pom.properties" );
+ properties.load( resourceAsStream );
+
+ String property = properties.getProperty( "version" );
+ if ( property == null )
+ {
+ throw new InitializationException( "maven-core properties did not include the version" );
+ }
+
+ applicationVersion = new DefaultArtifactVersion( property );
+ }
+ catch ( IOException e )
+ {
+ throw new InitializationException( "Unable to read properties file from maven-core", e );
+ }
+ finally
+ {
+ IOUtil.close( resourceAsStream );
+ }
+ }
}
diff --git a/maven-core/src/main/java/org/apache/maven/execution/RuntimeInformation.java b/maven-core/src/main/java/org/apache/maven/execution/RuntimeInformation.java
index a8f2e74545..bdf08578a7 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/RuntimeInformation.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/RuntimeInformation.java
@@ -18,8 +18,6 @@ package org.apache.maven.execution;
import org.apache.maven.artifact.versioning.ArtifactVersion;
-import java.io.IOException;
-
/**
* Describes runtime information about the application.
*
@@ -28,6 +26,5 @@ import java.io.IOException;
*/
public interface RuntimeInformation
{
- ArtifactVersion getApplicationVersion()
- throws IOException;
+ ArtifactVersion getApplicationVersion();
}
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
index 4873484bb6..2f931998e8 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
@@ -35,9 +35,11 @@ import org.apache.maven.model.ReportPlugin;
import org.apache.maven.model.ReportSet;
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.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.PluginConfigurationException;
import org.apache.maven.plugin.PluginManager;
import org.apache.maven.plugin.PluginManagerException;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
@@ -46,6 +48,7 @@ import org.apache.maven.plugin.lifecycle.Execution;
import org.apache.maven.plugin.lifecycle.Phase;
import org.apache.maven.plugin.version.PluginVersionResolutionException;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
import org.apache.maven.reporting.MavenReport;
import org.apache.maven.settings.Settings;
import org.codehaus.plexus.PlexusContainerException;
@@ -368,6 +371,13 @@ public class DefaultLifecycleExecutor
// TODO: should be dispatchFailure?
dispatcher.dispatchError( event, target, e );
+ handleExecutionFailure( rm, project, e, task, buildStartTime );
+ }
+ catch ( InvalidDependencyVersionException e )
+ {
+ // TODO: should be dispatchFailure?
+ dispatcher.dispatchError( event, target, e );
+
handleExecutionFailure( rm, project, e, task, buildStartTime );
}
}
@@ -516,7 +526,7 @@ public class DefaultLifecycleExecutor
private void executeGoal( String task, MavenSession session, MavenProject project, MavenExecutionResponse response )
throws LifecycleExecutionException, ArtifactNotFoundException, MojoExecutionException,
- ArtifactResolutionException, MojoFailureException
+ ArtifactResolutionException, MojoFailureException, InvalidDependencyVersionException
{
if ( getPhaseToLifecycleMap().containsKey( task ) )
{
@@ -535,7 +545,7 @@ public class DefaultLifecycleExecutor
private void executeGoalWithLifecycle( String task, MavenSession session, Map lifecycleMappings,
MavenProject project, MavenExecutionResponse response, Lifecycle lifecycle )
throws ArtifactResolutionException, LifecycleExecutionException, MojoExecutionException, MojoFailureException,
- ArtifactNotFoundException
+ ArtifactNotFoundException, InvalidDependencyVersionException
{
List goals = processGoalChain( task, lifecycleMappings, lifecycle );
@@ -552,7 +562,7 @@ public class DefaultLifecycleExecutor
private void executeStandaloneGoal( String task, MavenSession session, MavenProject project,
MavenExecutionResponse response )
throws ArtifactResolutionException, LifecycleExecutionException, MojoExecutionException, MojoFailureException,
- ArtifactNotFoundException
+ ArtifactNotFoundException, InvalidDependencyVersionException
{
// guaranteed to come from the CLI and not be part of a phase
MojoDescriptor mojoDescriptor = getMojoDescriptor( task, session, project, task, true );
@@ -561,7 +571,7 @@ public class DefaultLifecycleExecutor
private void executeGoals( List goals, MavenSession session, MavenProject project, MavenExecutionResponse response )
throws LifecycleExecutionException, MojoExecutionException, ArtifactResolutionException, MojoFailureException,
- ArtifactNotFoundException
+ ArtifactNotFoundException, InvalidDependencyVersionException
{
for ( Iterator i = goals.iterator(); i.hasNext(); )
{
@@ -598,8 +608,8 @@ public class DefaultLifecycleExecutor
}
catch ( PluginManagerException e )
{
- throw new LifecycleExecutionException(
- "Internal error in the plugin manager executing goal '" + mojoDescriptor.getId(), e );
+ throw new LifecycleExecutionException( "Internal error in the plugin manager executing goal '" +
+ mojoDescriptor.getId() + "': " + e.getMessage(), e );
}
}
}
@@ -724,6 +734,11 @@ public class DefaultLifecycleExecutor
}
}
catch ( PluginManagerException e )
+ {
+ throw new LifecycleExecutionException(
+ "Error getting reports from the plugin '" + reportPlugin.getKey() + "': " + e.getMessage(), e );
+ }
+ catch ( PluginConfigurationException e )
{
throw new LifecycleExecutionException(
"Error getting reports from the plugin '" + reportPlugin.getKey() + "'", e );
@@ -736,7 +751,7 @@ public class DefaultLifecycleExecutor
private void forkLifecycle( MojoDescriptor mojoDescriptor, MavenSession session, MavenProject project,
MavenExecutionResponse response )
throws LifecycleExecutionException, MojoExecutionException, ArtifactResolutionException, MojoFailureException,
- ArtifactNotFoundException
+ ArtifactNotFoundException, InvalidDependencyVersionException
{
PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
getLogger().info( "Preparing " + pluginDescriptor.getGoalPrefix() + ":" + mojoDescriptor.getGoal() );
@@ -767,7 +782,7 @@ public class DefaultLifecycleExecutor
private void forkProjectLifecycle( MojoDescriptor mojoDescriptor, MavenSession session, MavenProject project,
MavenExecutionResponse response )
throws ArtifactResolutionException, LifecycleExecutionException, MojoExecutionException, MojoFailureException,
- ArtifactNotFoundException
+ ArtifactNotFoundException, InvalidDependencyVersionException
{
PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
@@ -1015,7 +1030,9 @@ public class DefaultLifecycleExecutor
ArtifactRepository localRepository )
throws ArtifactResolutionException, ArtifactNotFoundException, LifecycleExecutionException
{
- for ( Iterator i = project.getBuildPlugins().iterator(); i.hasNext(); )
+ Object pluginComponent = null;
+
+ for ( Iterator i = project.getBuildPlugins().iterator(); i.hasNext() && pluginComponent == null; )
{
Plugin plugin = (Plugin) i.next();
@@ -1026,7 +1043,7 @@ public class DefaultLifecycleExecutor
// TODO: if moved to the plugin manager we already have the descriptor from above and so do can lookup the container directly
try
{
- return pluginManager.getPluginComponent( plugin, role, roleHint );
+ pluginComponent = pluginManager.getPluginComponent( plugin, role, roleHint );
}
catch ( ComponentLookupException e )
{
@@ -1035,11 +1052,11 @@ public class DefaultLifecycleExecutor
catch ( PluginManagerException e )
{
throw new LifecycleExecutionException(
- "Error getting extensions from the plugin '" + plugin.getKey() + "'", e );
+ "Error getting extensions from the plugin '" + plugin.getKey() + "': " + e.getMessage(), e );
}
}
}
- return null;
+ return pluginComponent;
}
/**
@@ -1070,7 +1087,8 @@ public class DefaultLifecycleExecutor
}
catch ( PluginManagerException e )
{
- throw new LifecycleExecutionException( "Error looking up available components from a plugin", e );
+ throw new LifecycleExecutionException( "Error looking up available components from plugin '" +
+ plugin.getKey() + "': " + e.getMessage(), e );
}
// shudder...
@@ -1140,7 +1158,8 @@ public class DefaultLifecycleExecutor
}
catch ( PluginManagerException e )
{
- throw new LifecycleExecutionException( "Internal error in the plugin manager", e );
+ throw new LifecycleExecutionException(
+ "Internal error in the plugin manager getting plugin '" + plugin.getKey() + "': " + e.getMessage(), e );
}
catch ( PluginVersionResolutionException e )
{
@@ -1150,6 +1169,10 @@ public class DefaultLifecycleExecutor
{
throw new LifecycleExecutionException( "Error resolving plugin version", e );
}
+ catch ( InvalidPluginException e )
+ {
+ throw new LifecycleExecutionException( "Error resolving plugin version", e );
+ }
return pluginDescriptor;
}
@@ -1163,7 +1186,8 @@ public class DefaultLifecycleExecutor
}
catch ( PluginManagerException e )
{
- throw new LifecycleExecutionException( "Internal error in the plugin manager", e );
+ throw new LifecycleExecutionException(
+ "Internal error in the plugin manager getting report '" + plugin.getKey() + "': " + e.getMessage(), e );
}
catch ( PluginVersionResolutionException e )
{
@@ -1173,6 +1197,10 @@ public class DefaultLifecycleExecutor
{
throw new LifecycleExecutionException( "Error resolving plugin version", e );
}
+ catch ( InvalidPluginException e )
+ {
+ throw new LifecycleExecutionException( "Error resolving plugin version", e );
+ }
return pluginDescriptor;
}
@@ -1293,15 +1321,7 @@ public class DefaultLifecycleExecutor
// 2. look in the repository via search groups
if ( pluginDescriptor == null )
{
- try
- {
- plugin = pluginManager.getPluginDefinitionForPrefix( prefix, session, project );
- }
- catch ( PluginManagerException e )
- {
- throw new LifecycleExecutionException(
- "Cannot resolve plugin-prefix: \'" + prefix + "\' from plugin mappings metadata.", e );
- }
+ plugin = pluginManager.getPluginDefinitionForPrefix( prefix, session, project );
}
else
{
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
index 399b778eea..6991f825c0 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
@@ -49,6 +49,7 @@ 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;
import org.apache.maven.reporting.MavenReport;
@@ -74,7 +75,6 @@ import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import java.io.File;
-import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
@@ -136,7 +136,6 @@ public class DefaultPluginManager
}
public Plugin getPluginDefinitionForPrefix( String prefix, MavenSession session, MavenProject project )
- throws PluginManagerException
{
// TODO: since this is only used in the lifecycle executor, maybe it should be moved there? There is no other
// use for the mapping manager in here
@@ -147,8 +146,8 @@ public class DefaultPluginManager
public PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings,
ArtifactRepository localRepository )
- throws ArtifactResolutionException, PluginManagerException, PluginVersionResolutionException,
- ArtifactNotFoundException, InvalidVersionSpecificationException
+ throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException
{
// TODO: this should be possibly outside
// All version-resolution logic has been moved to DefaultPluginVersionManager.
@@ -164,8 +163,8 @@ public class DefaultPluginManager
private PluginDescriptor verifyVersionedPlugin( Plugin plugin, MavenProject project,
ArtifactRepository localRepository )
- throws PluginVersionResolutionException, PluginManagerException, ArtifactNotFoundException,
- ArtifactResolutionException, InvalidVersionSpecificationException
+ throws PluginVersionResolutionException, ArtifactNotFoundException, ArtifactResolutionException,
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException
{
// TODO: this might result in an artifact "RELEASE" being resolved continuously
// FIXME: need to find out how a plugin gets marked as 'installed'
@@ -239,7 +238,7 @@ public class DefaultPluginManager
* manager which executes before the plugin is instantiated
*/
private void checkRequiredMavenVersion( Plugin plugin, ArtifactRepository localRepository, List remoteRepositories )
- throws PluginVersionResolutionException, PluginManagerException
+ throws PluginVersionResolutionException
{
try
{
@@ -264,15 +263,11 @@ public class DefaultPluginManager
throw new PluginVersionResolutionException( plugin.getGroupId(), plugin.getArtifactId(),
"Unable to build project for plugin", e );
}
- catch ( IOException e )
- {
- throw new PluginManagerException( "Unable to determine Maven version for comparison", e );
- }
}
protected void addPlugin( Plugin plugin, Artifact pluginArtifact, MavenProject project,
ArtifactRepository localRepository )
- throws ArtifactResolutionException, PluginManagerException, ArtifactNotFoundException
+ throws PluginManagerException, InvalidPluginException
{
PlexusContainer child;
try
@@ -284,7 +279,8 @@ public class DefaultPluginManager
}
catch ( PlexusContainerException e )
{
- throw new PluginManagerException( "Failed to create plugin container for plugin '" + plugin + "'", e );
+ throw new PluginManagerException(
+ "Failed to create plugin container for plugin '" + plugin + "': " + e.getMessage(), e );
}
// this plugin's descriptor should have been discovered in the child creation, so we should be able to
@@ -305,9 +301,9 @@ public class DefaultPluginManager
addedPlugin.setIntroducedDependencyArtifacts( artifacts );
}
- catch ( ProjectBuildingException e )
+ catch ( InvalidDependencyVersionException e )
{
- throw new PluginManagerException( "Error getting plugin dependencies", e );
+ throw new InvalidPluginException( "Plugin '" + plugin + "' is invalid: " + e.getMessage(), e );
}
}
@@ -316,8 +312,8 @@ public class DefaultPluginManager
// ----------------------------------------------------------------------
public void executeMojo( MavenProject project, MojoExecution mojoExecution, MavenSession session )
- throws ArtifactResolutionException, PluginManagerException, MojoExecutionException, MojoFailureException,
- ArtifactNotFoundException
+ throws ArtifactResolutionException, MojoExecutionException, MojoFailureException, ArtifactNotFoundException,
+ InvalidDependencyVersionException, PluginManagerException
{
MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
@@ -352,16 +348,8 @@ public class DefaultPluginManager
for ( Iterator i = projects.iterator(); i.hasNext(); )
{
MavenProject p = (MavenProject) i.next();
- try
- {
- resolveTransitiveDependencies( session, artifactResolver,
- mojoDescriptor.isDependencyResolutionRequired(), artifactFactory,
- p );
- }
- catch ( ProjectBuildingException e )
- {
- throw new PluginManagerException( e.getMessage(), e );
- }
+ resolveTransitiveDependencies( session, artifactResolver,
+ mojoDescriptor.isDependencyResolutionRequired(), artifactFactory, p );
}
downloadDependencies( project, session, artifactResolver );
@@ -393,10 +381,6 @@ public class DefaultPluginManager
String msg = "Error configuring plugin for execution of '" + goalName + "'.";
throw new MojoExecutionException( msg, e );
}
- catch ( ComponentLookupException e )
- {
- throw new MojoExecutionException( "Error looking up mojo: " + goalName, e );
- }
// Event monitoring.
String event = MavenEvents.MOJO_EXECUTION;
@@ -456,7 +440,7 @@ public class DefaultPluginManager
}
public MavenReport getReport( MavenProject project, MojoExecution mojoExecution, MavenSession session )
- throws PluginManagerException, ArtifactNotFoundException
+ throws ArtifactNotFoundException, PluginConfigurationException, PluginManagerException
{
MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
PluginDescriptor descriptor = mojoDescriptor.getPluginDescriptor();
@@ -467,25 +451,12 @@ public class DefaultPluginManager
dom = Xpp3Dom.mergeXpp3Dom( dom, mojoExecution.getConfiguration() );
}
- MavenReport reportMojo;
- try
- {
- reportMojo = (MavenReport) getConfiguredMojo( session, dom, project, true, mojoExecution );
- }
- catch ( ComponentLookupException e )
- {
- throw new PluginManagerException( "Error looking up report: ", e );
- }
- catch ( PluginConfigurationException e )
- {
- throw new PluginManagerException( "Error configuring report: ", e );
- }
- return reportMojo;
+ return (MavenReport) getConfiguredMojo( session, dom, project, true, mojoExecution );
}
public PluginDescriptor verifyReportPlugin( ReportPlugin reportPlugin, MavenProject project, MavenSession session )
- throws PluginVersionResolutionException, ArtifactResolutionException, PluginManagerException,
- ArtifactNotFoundException, InvalidVersionSpecificationException
+ throws PluginVersionResolutionException, ArtifactResolutionException, ArtifactNotFoundException,
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException
{
String version = reportPlugin.getVersion();
@@ -516,7 +487,7 @@ public class DefaultPluginManager
if ( pluginContainer == null )
{
- throw new PluginManagerException( "Cannot find PlexusContainer for plugin: " + pluginKey );
+ throw new PluginManagerException( "Cannot find Plexus container for plugin: " + pluginKey );
}
return pluginContainer;
@@ -524,7 +495,7 @@ public class DefaultPluginManager
private Mojo getConfiguredMojo( MavenSession session, Xpp3Dom dom, MavenProject project, boolean report,
MojoExecution mojoExecution )
- throws ComponentLookupException, PluginConfigurationException, PluginManagerException, ArtifactNotFoundException
+ throws PluginConfigurationException, ArtifactNotFoundException, PluginManagerException
{
MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
@@ -537,11 +508,20 @@ public class DefaultPluginManager
// dependencies, and add them to the container.
ensurePluginContainerIsComplete( pluginDescriptor, pluginContainer, project, session );
- Mojo plugin = (Mojo) pluginContainer.lookup( Mojo.ROLE, mojoDescriptor.getRoleHint() );
- if ( report && !( plugin instanceof MavenReport ) )
+ Mojo plugin;
+ try
{
- // TODO: the mojoDescriptor should actually capture this information so we don't get this far
- return null;
+ plugin = (Mojo) pluginContainer.lookup( Mojo.ROLE, mojoDescriptor.getRoleHint() );
+ if ( report && !( plugin instanceof MavenReport ) )
+ {
+ // TODO: the mojoDescriptor should actually capture this information so we don't get this far
+ return null;
+ }
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new PluginManagerException( "Unable to find the mojo '" + mojoDescriptor.getRoleHint() +
+ "' in the plugin '" + pluginDescriptor.getPluginLookupKey() + "'", e );
}
if ( plugin instanceof ContextEnabled )
@@ -1155,7 +1135,7 @@ public class DefaultPluginManager
private void resolveTransitiveDependencies( MavenSession context, ArtifactResolver artifactResolver, String scope,
ArtifactFactory artifactFactory, MavenProject project )
- throws ArtifactResolutionException, ArtifactNotFoundException, ProjectBuildingException
+ throws ArtifactResolutionException, ArtifactNotFoundException, InvalidDependencyVersionException
{
ArtifactFilter filter = new ScopeArtifactFilter( scope );
@@ -1197,7 +1177,7 @@ public class DefaultPluginManager
}
public Object getPluginComponent( Plugin plugin, String role, String roleHint )
- throws ComponentLookupException, PluginManagerException
+ throws PluginManagerException, ComponentLookupException
{
PluginDescriptor pluginDescriptor = pluginCollector.getPluginDescriptor( plugin );
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java b/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java
new file mode 100644
index 0000000000..5bca607594
--- /dev/null
+++ b/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java
@@ -0,0 +1,32 @@
+package org.apache.maven.plugin;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Thrown when a plugin is not internally consistent.
+ *
+ * @author Brett Porter
+ * @version $Id$
+ */
+public class InvalidPluginException
+ extends Exception
+{
+ public InvalidPluginException( String message, Exception e )
+ {
+ super( message, e );
+ }
+}
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
index 060ca9bdc4..4173b5a0ce 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
@@ -26,6 +26,7 @@ import org.apache.maven.model.ReportPlugin;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.plugin.version.PluginVersionResolutionException;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
import org.apache.maven.reporting.MavenReport;
import org.apache.maven.settings.Settings;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
@@ -41,28 +42,27 @@ public interface PluginManager
String ROLE = PluginManager.class.getName();
void executeMojo( MavenProject project, MojoExecution execution, MavenSession session )
- throws MojoExecutionException, PluginManagerException, ArtifactResolutionException, MojoFailureException,
- ArtifactNotFoundException;
+ throws MojoExecutionException, ArtifactResolutionException, MojoFailureException, ArtifactNotFoundException,
+ InvalidDependencyVersionException, PluginManagerException;
MavenReport getReport( MavenProject project, MojoExecution mojoExecution, MavenSession session )
- throws PluginManagerException, ArtifactNotFoundException;
+ throws ArtifactNotFoundException, PluginConfigurationException, PluginManagerException;
PluginDescriptor getPluginDescriptorForPrefix( String prefix );
- Plugin getPluginDefinitionForPrefix( String prefix, MavenSession session, MavenProject project )
- throws PluginManagerException;
+ Plugin getPluginDefinitionForPrefix( String prefix, MavenSession session, MavenProject project );
PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings,
ArtifactRepository localRepository )
- throws ArtifactResolutionException, PluginManagerException, PluginVersionResolutionException,
- ArtifactNotFoundException, InvalidVersionSpecificationException;
+ throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException;
PluginDescriptor verifyReportPlugin( ReportPlugin reportPlugin, MavenProject project, MavenSession session )
- throws PluginVersionResolutionException, ArtifactResolutionException, PluginManagerException,
- ArtifactNotFoundException, InvalidVersionSpecificationException;
+ throws PluginVersionResolutionException, ArtifactResolutionException, ArtifactNotFoundException,
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException;
Object getPluginComponent( Plugin plugin, String role, String roleHint )
- throws ComponentLookupException, PluginManagerException;
+ throws PluginManagerException, ComponentLookupException;
Map getPluginComponents( Plugin plugin, String role )
throws ComponentLookupException, PluginManagerException;
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java b/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java
index a4a2f4e1b4..a7f50e8dc5 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java
@@ -696,11 +696,6 @@ public class DefaultPluginVersionManager
throw new PluginVersionResolutionException( groupId, artifactId,
"Unable to build resolve plugin project information", e );
}
- catch ( IOException e )
- {
- throw new PluginVersionResolutionException( groupId, artifactId,
- "Unable to determine Maven version for comparison", e );
- }
return version;
}
diff --git a/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java b/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java
index b3d1f846a2..9ac212498d 100644
--- a/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java
+++ b/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java
@@ -23,6 +23,7 @@ import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException
import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.InvalidPluginException;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.PluginManager;
@@ -276,15 +277,7 @@ public class DescribeMojo
if ( descriptor == null )
{
- try
- {
- forLookup = pluginManager.getPluginDefinitionForPrefix( pi.prefix, session, project );
- }
- catch ( PluginManagerException e )
- {
- throw new MojoExecutionException(
- "Cannot resolve plugin-prefix: \'" + pi.prefix + "\' from plugin mappings metadata.", e );
- }
+ forLookup = pluginManager.getPluginDefinitionForPrefix( pi.prefix, session, project );
}
}
else if ( pi.groupId != null && pi.artifactId != null )
@@ -336,6 +329,11 @@ public class DescribeMojo
throw new MojoExecutionException( "Error retrieving plugin descriptor for:\n\ngroupId: \'" + groupId +
"\'\nartifactId: \'" + artifactId + "\'\nversion: \'" + version + "\'\n\n", e );
}
+ catch ( InvalidPluginException e )
+ {
+ throw new MojoExecutionException( "Error retrieving plugin descriptor for:\n\ngroupId: \'" + groupId +
+ "\'\nartifactId: \'" + artifactId + "\'\nversion: \'" + version + "\'\n\n", e );
+ }
}
return descriptor;
diff --git a/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java b/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
index 28d131f3e9..1c2d98c3a5 100644
--- a/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
+++ b/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
@@ -51,6 +51,7 @@ import org.apache.maven.profiles.ProfileManager;
import org.apache.maven.profiles.ProfilesConversionUtils;
import org.apache.maven.profiles.ProfilesRoot;
import org.apache.maven.profiles.activation.ProfileActivationException;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
import org.apache.maven.project.injection.ModelDefaultsInjector;
import org.apache.maven.project.injection.ProfileInjector;
@@ -191,7 +192,16 @@ public class DefaultMavenProjectBuilder
ensureMetadataSourceIsInitialized();
- project.setDependencyArtifacts( project.createArtifacts( artifactFactory, null, null ) );
+ try
+ {
+ project.setDependencyArtifacts( project.createArtifacts( artifactFactory, null, null ) );
+ }
+ catch ( InvalidDependencyVersionException e )
+ {
+ throw new ProjectBuildingException( projectId,
+ "Unable to build project due to an invalid dependency version: " +
+ e.getMessage(), e );
+ }
if ( transferListener != null )
{
diff --git a/maven-project/src/main/java/org/apache/maven/project/MavenProject.java b/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
index 45d489c975..f5cb281a77 100644
--- a/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
+++ b/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
@@ -45,6 +45,7 @@ import org.apache.maven.model.Resource;
import org.apache.maven.model.Scm;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
import org.apache.maven.project.artifact.ActiveProjectArtifact;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
import org.apache.maven.project.artifact.MavenMetadataSource;
import org.apache.maven.project.overlay.BuildOverlay;
import org.codehaus.plexus.util.xml.Xpp3Dom;
@@ -1405,7 +1406,7 @@ public class MavenProject
*/
public Set createArtifacts( ArtifactFactory artifactFactory, String inheritedScope,
ArtifactFilter dependencyFilter )
- throws ProjectBuildingException
+ throws InvalidDependencyVersionException
{
return MavenMetadataSource.createArtifacts( artifactFactory, getDependencies(), inheritedScope,
dependencyFilter, this );
diff --git a/maven-project/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java b/maven-project/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java
new file mode 100644
index 0000000000..28e1b02e56
--- /dev/null
+++ b/maven-project/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java
@@ -0,0 +1,32 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Thrown if a dependency has an invalid version.
+ *
+ * @author Brett Porter
+ * @version $Id$
+ */
+public class InvalidDependencyVersionException
+ extends Exception
+{
+ public InvalidDependencyVersionException( String message, Exception cause )
+ {
+ super( message, cause );
+ }
+}
diff --git a/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java b/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
index a01a41c56b..254bc127d3 100644
--- a/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
+++ b/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
@@ -17,7 +17,6 @@ package org.apache.maven.project.artifact;
*/
import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
@@ -206,6 +205,10 @@ public class MavenMetadataSource
{
throw new ArtifactMetadataRetrievalException( "Unable to read the metadata file", e );
}
+ catch ( InvalidDependencyVersionException e )
+ {
+ throw new ArtifactMetadataRetrievalException( "Unable to read the metadata file", e );
+ }
}
private List aggregateRepositoryLists( List remoteRepositories, List remoteArtifactRepositories )
@@ -259,7 +262,7 @@ public class MavenMetadataSource
*/
public static Set createArtifacts( ArtifactFactory artifactFactory, List dependencies, String inheritedScope,
ArtifactFilter dependencyFilter, MavenProject project )
- throws ProjectBuildingException
+ throws InvalidDependencyVersionException
{
Set projectArtifacts = new HashSet( dependencies.size() );
@@ -283,10 +286,7 @@ public class MavenMetadataSource
}
catch ( InvalidVersionSpecificationException e )
{
- String projectId = project != null ? ArtifactUtils.versionlessKey( project.getGroupId(),
- project.getArtifactId() )
- : "unknown";
- throw new ProjectBuildingException( projectId, "Unable to parse version '" + d.getVersion() +
+ throw new InvalidDependencyVersionException( "Unable to parse version '" + d.getVersion() +
"' for dependency '" + d.getManagementKey() + "': " + e.getMessage(), e );
}
Artifact artifact = artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(),