From 562facf5d24bf2ec3e6bbd9567c99c27356907f8 Mon Sep 17 00:00:00 2001 From: Brett Leslie Porter Date: Thu, 13 Oct 2005 09:13:11 +0000 Subject: [PATCH] PR: MNG-122 cleanup artifact metadata retrieval exceptions git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@320701 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/maven/artifact/ant/DeployTask.java | 4 +- .../maven/artifact/ant/InstallTask.java | 4 +- .../maven/plugin/DefaultPluginManager.java | 114 +++++++++--------- .../apache/maven/plugin/PluginManager.java | 3 +- .../version/DefaultPluginVersionManager.java | 80 ++++++------ .../maven/plugin/deploy/DeployMojo.java | 4 +- .../maven/plugin/install/InstallFileMojo.java | 6 +- .../maven/plugin/install/InstallMojo.java | 4 +- .../project/artifact/MavenMetadataSource.java | 110 ++++++----------- 9 files changed, 152 insertions(+), 177 deletions(-) diff --git a/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DeployTask.java b/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DeployTask.java index 9c0174dd3b..6a79d72eda 100755 --- a/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DeployTask.java +++ b/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DeployTask.java @@ -118,8 +118,8 @@ public class DeployTask } catch ( ArtifactDeploymentException e ) { - // TODO: deployment exception that does not give a trace - throw new BuildException( "Error deploying artifact", e ); + throw new BuildException( + "Error deploying artifact '" + artifact.getDependencyConflictId() + "': " + e.getMessage(), e ); } } diff --git a/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/InstallTask.java b/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/InstallTask.java index 2a257ef063..dfe9c826de 100755 --- a/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/InstallTask.java +++ b/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/InstallTask.java @@ -69,8 +69,8 @@ public class InstallTask } catch ( ArtifactInstallationException e ) { - // TODO: install exception that does not give a trace - throw new BuildException( "Error installing artifact", e ); + throw new BuildException( + "Error installing artifact '" + artifact.getDependencyConflictId() + "': " + e.getMessage(), e ); } } 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 6991f825c0..0e03f3e579 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 @@ -440,7 +440,8 @@ public class DefaultPluginManager } public MavenReport getReport( MavenProject project, MojoExecution mojoExecution, MavenSession session ) - throws ArtifactNotFoundException, PluginConfigurationException, PluginManagerException + throws ArtifactNotFoundException, PluginConfigurationException, PluginManagerException, + ArtifactResolutionException { MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor(); PluginDescriptor descriptor = mojoDescriptor.getPluginDescriptor(); @@ -495,7 +496,8 @@ public class DefaultPluginManager private Mojo getConfiguredMojo( MavenSession session, Xpp3Dom dom, MavenProject project, boolean report, MojoExecution mojoExecution ) - throws PluginConfigurationException, ArtifactNotFoundException, PluginManagerException + throws PluginConfigurationException, ArtifactNotFoundException, PluginManagerException, + ArtifactResolutionException { MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor(); @@ -570,7 +572,7 @@ public class DefaultPluginManager private void ensurePluginContainerIsComplete( PluginDescriptor pluginDescriptor, PlexusContainer pluginContainer, MavenProject project, MavenSession session ) - throws PluginConfigurationException, ArtifactNotFoundException + throws ArtifactNotFoundException, PluginManagerException, ArtifactResolutionException { // if the plugin's already been used once, don't re-do this step... // otherwise, we have to finish resolving the plugin's classpath and start the container. @@ -578,64 +580,66 @@ public class DefaultPluginManager { Artifact pluginArtifact = (Artifact) pluginDescriptor.getArtifacts().get( 0 ); + ArtifactRepository localRepository = session.getLocalRepository(); + + ResolutionGroup resolutionGroup; try { - ArtifactRepository localRepository = session.getLocalRepository(); - - ResolutionGroup resolutionGroup = artifactMetadataSource.retrieve( pluginArtifact, localRepository, - project.getPluginArtifactRepositories() ); - - Set dependencies = new HashSet( resolutionGroup.getArtifacts() ); - - dependencies.addAll( pluginDescriptor.getIntroducedDependencyArtifacts() ); - - ArtifactResolutionResult result = artifactResolver.resolveTransitively( dependencies, pluginArtifact, - localRepository, - resolutionGroup.getResolutionRepositories(), - artifactMetadataSource, - artifactFilter ); - - Set resolved = result.getArtifacts(); - - for ( Iterator it = resolved.iterator(); it.hasNext(); ) - { - Artifact artifact = (Artifact) it.next(); - - if ( !artifact.equals( pluginArtifact ) ) - { - artifact = project.replaceWithActiveArtifact( artifact ); - - pluginContainer.addJarResource( artifact.getFile() ); - } - } - - pluginDescriptor.setClassRealm( pluginContainer.getContainerRealm() ); - - List unresolved = new ArrayList( dependencies ); - - unresolved.removeAll( resolved ); - - resolveCoreArtifacts( unresolved, localRepository, resolutionGroup.getResolutionRepositories() ); - - List allResolved = new ArrayList( resolved.size() + unresolved.size() ); - - allResolved.addAll( resolved ); - allResolved.addAll( unresolved ); - - pluginDescriptor.setArtifacts( allResolved ); - } - catch ( ArtifactResolutionException e ) - { - throw new PluginConfigurationException( pluginDescriptor, "Cannot resolve plugin dependencies", e ); - } - catch ( PlexusContainerException e ) - { - throw new PluginConfigurationException( pluginDescriptor, "Cannot start plugin container", e ); + resolutionGroup = artifactMetadataSource.retrieve( pluginArtifact, localRepository, + project.getPluginArtifactRepositories() ); } catch ( ArtifactMetadataRetrievalException e ) { - throw new PluginConfigurationException( pluginDescriptor, "Cannot resolve plugin dependencies", e ); + throw new ArtifactResolutionException( "Unable to download metadata from repository for plugin '" + + pluginArtifact.getId() + "': " + e.getMessage(), pluginArtifact, e ); } + + Set dependencies = new HashSet( resolutionGroup.getArtifacts() ); + + dependencies.addAll( pluginDescriptor.getIntroducedDependencyArtifacts() ); + + ArtifactResolutionResult result = artifactResolver.resolveTransitively( dependencies, pluginArtifact, + localRepository, + resolutionGroup.getResolutionRepositories(), + artifactMetadataSource, + artifactFilter ); + + Set resolved = result.getArtifacts(); + + for ( Iterator it = resolved.iterator(); it.hasNext(); ) + { + Artifact artifact = (Artifact) it.next(); + + if ( !artifact.equals( pluginArtifact ) ) + { + artifact = project.replaceWithActiveArtifact( artifact ); + + try + { + pluginContainer.addJarResource( artifact.getFile() ); + } + catch ( PlexusContainerException e ) + { + throw new PluginManagerException( "Error adding plugin dependency '" + + artifact.getDependencyConflictId() + "' into plugin manager: " + e.getMessage(), e ); + } + } + } + + pluginDescriptor.setClassRealm( pluginContainer.getContainerRealm() ); + + List unresolved = new ArrayList( dependencies ); + + unresolved.removeAll( resolved ); + + resolveCoreArtifacts( unresolved, localRepository, resolutionGroup.getResolutionRepositories() ); + + List allResolved = new ArrayList( resolved.size() + unresolved.size() ); + + allResolved.addAll( resolved ); + allResolved.addAll( unresolved ); + + pluginDescriptor.setArtifacts( allResolved ); } } 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 4173b5a0ce..884723393e 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 @@ -46,7 +46,8 @@ public interface PluginManager InvalidDependencyVersionException, PluginManagerException; MavenReport getReport( MavenProject project, MojoExecution mojoExecution, MavenSession session ) - throws ArtifactNotFoundException, PluginConfigurationException, PluginManagerException; + throws ArtifactNotFoundException, PluginConfigurationException, PluginManagerException, + ArtifactResolutionException; PluginDescriptor getPluginDescriptorForPrefix( String prefix ); 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 a7f50e8dc5..0ac91d2c75 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 @@ -624,11 +624,13 @@ public class DefaultPluginVersionManager } catch ( IOException e ) { - throw new PluginVersionResolutionException( groupId, artifactId, "Cannot read plugin registry", e ); + throw new PluginVersionResolutionException( groupId, artifactId, + "Error readin plugin registry: " + e.getMessage(), e ); } catch ( XmlPullParserException e ) { - throw new PluginVersionResolutionException( groupId, artifactId, "Cannot parse plugin registry", e ); + throw new PluginVersionResolutionException( groupId, artifactId, + "Error parsing plugin registry: " + e.getMessage(), e ); } if ( pluginRegistry == null ) @@ -648,6 +650,7 @@ public class DefaultPluginVersionManager String version = null; + // This takes the spec version and resolves a real version try { ResolutionGroup resolutionGroup = @@ -656,45 +659,50 @@ public class DefaultPluginVersionManager // switching this out with the actual resolved artifact instance, since the MMSource re-creates the pom // artifact. artifact = resolutionGroup.getPomArtifact(); - - // make sure this artifact was actually resolved to a file in the repo... - if ( artifact.getFile() != null ) - { - MavenProject pluginProject = mavenProjectBuilder.buildFromRepository( artifact, project - .getPluginArtifactRepositories(), localRepository, false ); - - boolean pluginValid = true; - - // 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() ); - - if ( runtimeInformation.getApplicationVersion().compareTo( requiredVersion ) < 0 ) - { - getLogger().info( "Ignoring available plugin update: " + artifact.getVersion() + - " as it requires Maven version " + requiredVersion ); - pluginValid = false; - } - } - - String artifactVersion = artifact.getVersion(); - - if ( pluginValid && !metaVersionId.equals( artifactVersion ) ) - { - version = artifactVersion; - } - } } catch ( ArtifactMetadataRetrievalException e ) { - getLogger().debug( "Failed to resolve " + metaVersionId + " version", e ); + throw new PluginVersionResolutionException( groupId, artifactId, e.getMessage(), e ); } - catch ( ProjectBuildingException e ) + + // make sure this artifact was actually resolved to a file in the repo... + if ( artifact.getFile() != null ) { - throw new PluginVersionResolutionException( groupId, artifactId, - "Unable to build resolve plugin project information", e ); + MavenProject pluginProject; + try + { + pluginProject = mavenProjectBuilder.buildFromRepository( artifact, + project.getPluginArtifactRepositories(), + localRepository, false ); + } + catch ( ProjectBuildingException e ) + { + throw new PluginVersionResolutionException( groupId, artifactId, + "Unable to build resolve plugin project information", e ); + } + + boolean pluginValid = true; + + // 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() ); + + if ( runtimeInformation.getApplicationVersion().compareTo( requiredVersion ) < 0 ) + { + getLogger().info( "Ignoring available plugin update: " + artifact.getVersion() + + " as it requires Maven version " + requiredVersion ); + pluginValid = false; + } + } + + String artifactVersion = artifact.getVersion(); + + if ( pluginValid && !metaVersionId.equals( artifactVersion ) ) + { + version = artifactVersion; + } } return version; diff --git a/maven-plugins/maven-deploy-plugin/src/main/java/org/apache/maven/plugin/deploy/DeployMojo.java b/maven-plugins/maven-deploy-plugin/src/main/java/org/apache/maven/plugin/deploy/DeployMojo.java index f2f60d249a..cb4b109b9d 100644 --- a/maven-plugins/maven-deploy-plugin/src/main/java/org/apache/maven/plugin/deploy/DeployMojo.java +++ b/maven-plugins/maven-deploy-plugin/src/main/java/org/apache/maven/plugin/deploy/DeployMojo.java @@ -156,8 +156,8 @@ public class DeployMojo } catch ( ArtifactDeploymentException e ) { - // TODO: deployment exception that does not give a trace - throw new MojoExecutionException( "Error deploying artifact", e ); + throw new MojoExecutionException( + "Error deploying artifact '" + artifact.getDependencyConflictId() + "': " + e.getMessage(), e ); } } } \ No newline at end of file diff --git a/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallFileMojo.java b/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallFileMojo.java index 9cc9a5176d..ce10d0bdd9 100644 --- a/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallFileMojo.java +++ b/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallFileMojo.java @@ -30,7 +30,7 @@ import java.io.File; * @version $Id$ * @goal install-file * @requiresProject false - * @aggregator + * @aggregator */ public class InstallFileMojo extends AbstractInstallMojo @@ -90,8 +90,8 @@ public class InstallFileMojo } catch ( ArtifactInstallationException e ) { - // TODO: install exception that does not give a trace - throw new MojoExecutionException( "Error installing artifact", e ); + throw new MojoExecutionException( + "Error installing artifact '" + artifact.getDependencyConflictId() + "': " + e.getMessage(), e ); } } } diff --git a/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallMojo.java b/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallMojo.java index 4bcb01e154..f20be501c5 100644 --- a/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallMojo.java +++ b/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallMojo.java @@ -125,8 +125,8 @@ public class InstallMojo } catch ( ArtifactInstallationException e ) { - // TODO: install exception that does not give a trace - throw new MojoExecutionException( "Error installing artifact", e ); + throw new MojoExecutionException( + "Error installing artifact '" + artifact.getDependencyConflictId() + "': " + e.getMessage(), e ); } } } 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 b7aefe6cab..cb678d89f2 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 @@ -27,7 +27,6 @@ import org.apache.maven.artifact.repository.metadata.Metadata; import org.apache.maven.artifact.repository.metadata.RepositoryMetadata; import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager; import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException; -import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; import org.apache.maven.artifact.resolver.filter.AndArtifactFilter; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter; @@ -43,15 +42,9 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; import org.codehaus.plexus.logging.AbstractLogEnabled; -import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.StringUtils; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.io.Reader; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -118,7 +111,8 @@ public class MavenMetadataSource } catch ( ProjectBuildingException e ) { - throw new ArtifactMetadataRetrievalException( "Unable to read the metadata file", e ); + throw new ArtifactMetadataRetrievalException( "Unable to read the metadata file for artifact '" + + artifact.getDependencyConflictId() + "': " + e.getMessage(), e ); } if ( project != null ) @@ -172,52 +166,56 @@ public class MavenMetadataSource // TODO: this could come straight from the project, negating the need to set it in the project itself? artifact.setDownloadUrl( pomArtifact.getDownloadUrl() ); - try - { - ResolutionGroup result; + ResolutionGroup result; - if ( project == null ) + if ( project == null ) + { + // if the project is null, we encountered an invalid model (read: m1 POM) + // we'll just return an empty resolution group. + // or used the inherited scope (should that be passed to the buildFromRepository method above?) + result = new ResolutionGroup( pomArtifact, Collections.EMPTY_SET, Collections.EMPTY_LIST ); + } + else + { + Set artifacts = Collections.EMPTY_SET; + if ( !artifact.getArtifactHandler().isIncludesDependencies() ) { - // if the project is null, we encountered an invalid model (read: m1 POM) - // we'll just return an empty resolution group. + // TODO: we could possibly use p.getDependencyArtifacts instead of this call, but they haven't been filtered // or used the inherited scope (should that be passed to the buildFromRepository method above?) - result = new ResolutionGroup( pomArtifact, Collections.EMPTY_SET, Collections.EMPTY_LIST ); - } - else - { - Set artifacts = Collections.EMPTY_SET; - if ( !artifact.getArtifactHandler().isIncludesDependencies() ) + try { - // TODO: we could possibly use p.getDependencyArtifacts instead of this call, but they haven't been filtered - // or used the inherited scope (should that be passed to the buildFromRepository method above?) artifacts = project.createArtifacts( artifactFactory, artifact.getScope(), artifact.getDependencyFilter() ); } - - List repositories = - aggregateRepositoryLists( remoteRepositories, project.getRemoteArtifactRepositories() ); - - result = new ResolutionGroup( pomArtifact, artifacts, repositories ); + catch ( InvalidDependencyVersionException e ) + { + throw new ArtifactMetadataRetrievalException( "Error in metadata for artifact '" + + artifact.getDependencyConflictId() + "': " + e.getMessage(), e ); + } } - return result; - } - catch ( ProjectBuildingException e ) - { - throw new ArtifactMetadataRetrievalException( "Unable to read the metadata file", e ); - } - catch ( InvalidDependencyVersionException e ) - { - throw new ArtifactMetadataRetrievalException( "Unable to read the metadata file", e ); + List repositories = aggregateRepositoryLists( remoteRepositories, project.getRemoteArtifactRepositories() ); + + result = new ResolutionGroup( pomArtifact, artifacts, repositories ); } + + return result; } private List aggregateRepositoryLists( List remoteRepositories, List remoteArtifactRepositories ) - throws ProjectBuildingException + throws ArtifactMetadataRetrievalException { if ( superProject == null ) { - superProject = mavenProjectBuilder.buildStandaloneSuperProject( null ); + try + { + superProject = mavenProjectBuilder.buildStandaloneSuperProject( null ); + } + catch ( ProjectBuildingException e ) + { + throw new ArtifactMetadataRetrievalException( + "Unable to parse the Maven built-in model: " + e.getMessage(), e ); + } } List repositories = new ArrayList(); @@ -372,40 +370,4 @@ public class MavenMetadataSource return versions; } - - /** - * @todo share with DefaultPluginMappingManager. - */ - private static Metadata readMetadata( File mappingFile ) - throws ArtifactMetadataRetrievalException - { - Metadata result; - - Reader fileReader = null; - try - { - fileReader = new FileReader( mappingFile ); - - MetadataXpp3Reader mappingReader = new MetadataXpp3Reader(); - - result = mappingReader.read( fileReader ); - } - catch ( FileNotFoundException e ) - { - throw new ArtifactMetadataRetrievalException( "Cannot read version information from: " + mappingFile, e ); - } - catch ( IOException e ) - { - throw new ArtifactMetadataRetrievalException( "Cannot read version information from: " + mappingFile, e ); - } - catch ( XmlPullParserException e ) - { - throw new ArtifactMetadataRetrievalException( "Cannot parse version information from: " + mappingFile, e ); - } - finally - { - IOUtil.close( fileReader ); - } - return result; - } }