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 2007/11/27 20:55:08 UTC
svn commit: r598748 [1/2] - in /maven/components/trunk: maven-embedder/
maven-embedder/src/main/aspect/org/apache/maven/embedder/cache/
maven-embedder/src/main/java/org/apache/maven/cli/
maven-embedder/src/test/java/org/apache/maven/cli/ maven-project/...
Author: jdcasey
Date: Tue Nov 27 11:55:04 2007
New Revision: 598748
URL: http://svn.apache.org/viewvc?rev=598748&view=rev
Log:
Adding error reporting for most project errors via aspects that collect the context information and format a nice message (the aspect just binds to the errors API in org.apache.maven.project.error.*).
Added:
maven/components/trunk/maven-embedder/src/main/aspect/org/apache/maven/embedder/cache/ErrorReportingAspect.aj
maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/PBEDerivativeReporterAspect.aj
maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/ProfileErrorReporterAspect.aj
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/DefaultProjectErrorReporter.java (with props)
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/ProjectErrorReporter.java (with props)
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/ProjectErrorTips.java (with props)
Removed:
maven/components/trunk/maven-embedder/src/test/java/org/apache/maven/cli/CLIReportingUtilsTest.java
Modified:
maven/components/trunk/maven-embedder/pom.xml
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java
maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/ProjectCacheAspect.aj
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java
Modified: maven/components/trunk/maven-embedder/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/pom.xml?rev=598748&r1=598747&r2=598748&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/pom.xml (original)
+++ maven/components/trunk/maven-embedder/pom.xml Tue Nov 27 11:55:04 2007
@@ -33,6 +33,11 @@
<version>2.1-SNAPSHOT</version>
</dependency>
<dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-container-default</artifactId>
</dependency>
@@ -69,7 +74,7 @@
<artifactId>wagon-file</artifactId>
</dependency>
- <!-- Needed for backward compat aspect. -->
+ <!-- Needed for compat and cache-control aspects. -->
<dependency>
<groupId>aspectj</groupId>
<artifactId>aspectjrt</artifactId>
@@ -175,7 +180,7 @@
-->
<id>tycho</id>
<properties>
- <bundleVersion>2.1.0.v20071105-1933</bundleVersion>
+ <bundleVersion>2.1.0.v20071120-1632</bundleVersion>
</properties>
<build>
<resources>
Added: maven/components/trunk/maven-embedder/src/main/aspect/org/apache/maven/embedder/cache/ErrorReportingAspect.aj
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/aspect/org/apache/maven/embedder/cache/ErrorReportingAspect.aj?rev=598748&view=auto
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/aspect/org/apache/maven/embedder/cache/ErrorReportingAspect.aj (added)
+++ maven/components/trunk/maven-embedder/src/main/aspect/org/apache/maven/embedder/cache/ErrorReportingAspect.aj Tue Nov 27 11:55:04 2007
@@ -0,0 +1,87 @@
+package org.apache.maven.embedder.cache;
+
+import org.aspectj.lang.Aspects;
+
+import java.io.StringWriter;
+import java.io.PrintWriter;
+
+import org.apache.maven.cli.CLIReportingUtils;
+import org.apache.maven.embedder.MavenEmbedder;
+import org.apache.maven.execution.MavenExecutionResult;
+import org.apache.maven.project.aspect.PBEDerivativeReporterAspect;
+import org.apache.maven.project.error.DefaultProjectErrorReporter;
+import org.apache.maven.project.error.ProjectErrorReporter;
+import org.apache.maven.project.ProjectBuildingException;
+
+public privileged aspect ErrorReportingAspect
+{
+
+ private ProjectErrorReporter projectErrorReporter;
+
+ private pointcut embedderCalls():
+ execution( public MavenExecutionResult MavenEmbedder.*( .. ) );
+
+ before():
+ embedderCalls() && !cflow( embedderCalls() )
+ {
+ projectErrorReporter = new DefaultProjectErrorReporter();
+
+ PBEDerivativeReporterAspect pbeDerivativeReporterAspect = Aspects.aspectOf( PBEDerivativeReporterAspect.class );
+ pbeDerivativeReporterAspect.setProjectErrorReporter( projectErrorReporter );
+ }
+
+ private pointcut cliReportingUtilsCalls():
+ execution( * CLIReportingUtils.*( .. ) );
+
+ before():
+ cliReportingUtilsCalls()
+ && !cflow( cliReportingUtilsCalls() )
+ && !cflow( embedderCalls() )
+ {
+ projectErrorReporter = new DefaultProjectErrorReporter();
+
+ PBEDerivativeReporterAspect pbeDerivativeReporterAspect = Aspects.aspectOf( PBEDerivativeReporterAspect.class );
+ pbeDerivativeReporterAspect.setProjectErrorReporter( projectErrorReporter );
+ }
+
+ boolean around( ProjectBuildingException e, boolean showStackTraces, StringWriter writer ):
+ execution( private static boolean CLIReportingUtils.handleProjectBuildingException( ProjectBuildingException, boolean, StringWriter ) )
+ && args( e, showStackTraces, writer )
+ {
+// if ( projectErrorReporter == null )
+// {
+// return proceed( e, showStackTraces, writer );
+// }
+// else
+// {
+ Throwable reportingError = projectErrorReporter.findReportedException( e );
+
+ boolean result = false;
+
+ if ( reportingError != null )
+ {
+ writer.write( projectErrorReporter.getFormattedMessage( reportingError ) );
+
+ if ( showStackTraces )
+ {
+ writer.write( CLIReportingUtils.NEWLINE );
+ writer.write( CLIReportingUtils.NEWLINE );
+ Throwable cause = projectErrorReporter.getRealCause( reportingError );
+ cause.printStackTrace( new PrintWriter( writer ) );
+ }
+
+ writer.write( CLIReportingUtils.NEWLINE );
+ writer.write( CLIReportingUtils.NEWLINE );
+
+ result = true;
+ }
+ else
+ {
+ result = proceed( e, showStackTraces, writer );
+ }
+
+ return result;
+// }
+ }
+
+}
Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java?rev=598748&r1=598747&r2=598748&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java Tue Nov 27 11:55:04 2007
@@ -6,7 +6,6 @@
import org.apache.maven.NoGoalsSpecifiedException;
import org.apache.maven.ProjectBuildFailureException;
import org.apache.maven.ProjectCycleException;
-import org.apache.maven.artifact.InvalidRepositoryException;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.embedder.MavenEmbedderConsoleLogger;
@@ -18,20 +17,15 @@
import org.apache.maven.extension.ExtensionScanningException;
import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.lifecycle.MojoBindingUtils;
-import org.apache.maven.model.Dependency;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.PluginNotFoundException;
import org.apache.maven.plugin.loader.PluginLoaderException;
import org.apache.maven.plugin.version.PluginVersionNotFoundException;
import org.apache.maven.plugin.version.PluginVersionResolutionException;
-import org.apache.maven.profiles.activation.ProfileActivationException;
import org.apache.maven.project.DuplicateProjectException;
-import org.apache.maven.project.InvalidProjectModelException;
-import org.apache.maven.project.InvalidProjectVersionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingException;
-import org.apache.maven.project.artifact.InvalidDependencyVersionException;
import org.apache.maven.reactor.MavenExecutionException;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -610,73 +604,76 @@
Throwable cause = e.getCause();
// Start by looking at whether we can handle the PBE as a specific sub-class of ProjectBuildingException...
- if ( e instanceof InvalidProjectModelException )
- {
- InvalidProjectModelException error = (InvalidProjectModelException) e;
-
- writer.write( error.getMessage() );
- writer.write( NEWLINE );
- writer.write( NEWLINE );
- writer.write( "The following POM validation errors were detected:" );
- writer.write( NEWLINE );
-
- for ( Iterator it = error.getValidationResult().getMessages().iterator(); it.hasNext(); )
- {
- String message = (String) it.next();
- writer.write( NEWLINE );
- writer.write( " - " );
- writer.write( message );
- }
-
- writer.write( NEWLINE );
- writer.write( NEWLINE );
-
- result = true;
- }
- else if ( e instanceof InvalidDependencyVersionException )
- {
- writer.write( NEWLINE );
- writer.write( "Your project declares a dependency with an invalid version." );
- writer.write( NEWLINE );
- writer.write( NEWLINE );
-
- Dependency dep = ((InvalidDependencyVersionException)e).getDependency();
- writer.write( "Dependency:" );
- writer.write( NEWLINE );
- writer.write( "Group-Id: " );
- writer.write( dep.getGroupId() );
- writer.write( NEWLINE );
- writer.write( "Artifact-Id: " );
- writer.write( dep.getArtifactId() );
- writer.write( NEWLINE );
- writer.write( "Version: " );
- writer.write( dep.getVersion() );
- writer.write( NEWLINE );
- writer.write( NEWLINE );
-
- writer.write( "Reason: " );
- writer.write( cause.getMessage() );
- writer.write( NEWLINE );
-
- result = true;
- }
+// if ( e instanceof InvalidProjectModelException )
+// {
+// InvalidProjectModelException error = (InvalidProjectModelException) e;
+//
+// writer.write( error.getMessage() );
+// writer.write( NEWLINE );
+// writer.write( NEWLINE );
+// writer.write( "The following POM validation errors were detected:" );
+// writer.write( NEWLINE );
+//
+// for ( Iterator it = error.getValidationResult().getMessages().iterator(); it.hasNext(); )
+// {
+// String message = (String) it.next();
+// writer.write( NEWLINE );
+// writer.write( " - " );
+// writer.write( message );
+// }
+//
+// writer.write( NEWLINE );
+// writer.write( NEWLINE );
+//
+// result = true;
+// }
+ if ( false )
+ {
+ }
+// else if ( e instanceof InvalidDependencyVersionException )
+// {
+// writer.write( NEWLINE );
+// writer.write( "Your project declares a dependency with an invalid version." );
+// writer.write( NEWLINE );
+// writer.write( NEWLINE );
+//
+// Dependency dep = ((InvalidDependencyVersionException)e).getDependency();
+// writer.write( "Dependency:" );
+// writer.write( NEWLINE );
+// writer.write( "Group-Id: " );
+// writer.write( dep.getGroupId() );
+// writer.write( NEWLINE );
+// writer.write( "Artifact-Id: " );
+// writer.write( dep.getArtifactId() );
+// writer.write( NEWLINE );
+// writer.write( "Version: " );
+// writer.write( dep.getVersion() );
+// writer.write( NEWLINE );
+// writer.write( NEWLINE );
+//
+// writer.write( "Reason: " );
+// writer.write( cause.getMessage() );
+// writer.write( NEWLINE );
+//
+// result = true;
+// }
// InvalidDependencyVersionException extends from InvalidProjectVersionException, so it comes first.
- else if ( e instanceof InvalidProjectVersionException )
- {
- writer.write( NEWLINE );
- writer.write( "You have an invalid version in your POM:" );
- writer.write( NEWLINE );
- writer.write( NEWLINE );
- writer.write( "Location: " );
- writer.write( ((InvalidProjectVersionException)e).getLocationInPom() );
- writer.write( NEWLINE );
- writer.write( NEWLINE );
- writer.write( "Reason: " );
- writer.write( cause.getMessage() );
- writer.write( NEWLINE );
-
- result = true;
- }
+// else if ( e instanceof InvalidProjectVersionException )
+// {
+// writer.write( NEWLINE );
+// writer.write( "You have an invalid version in your POM:" );
+// writer.write( NEWLINE );
+// writer.write( NEWLINE );
+// writer.write( "Location: " );
+// writer.write( ((InvalidProjectVersionException)e).getLocationInPom() );
+// writer.write( NEWLINE );
+// writer.write( NEWLINE );
+// writer.write( "Reason: " );
+// writer.write( cause.getMessage() );
+// writer.write( NEWLINE );
+//
+// result = true;
+// }
// now that we've sorted through all the sub-classes of ProjectBuildingException,
// let's look at causes of a basic PBE instance.
else if ( ( cause instanceof ArtifactNotFoundException )
@@ -692,18 +689,19 @@
result = true;
}
- else if ( cause instanceof ProfileActivationException )
- {
- writer.write( NEWLINE );
- writer.write( "Profile activation failed. One or more named profile activators may be missing." );
- writer.write( NEWLINE );
- writer.write( NEWLINE );
- writer.write( "Reason: " );
- writer.write( cause.getMessage() );
- writer.write( NEWLINE );
-
- result = true;
- }
+ // handled by aspect binding to ProjectErrorReporter now.
+// else if ( cause instanceof ProfileActivationException )
+// {
+// writer.write( NEWLINE );
+// writer.write( "Profile activation failed. One or more named profile activators may be missing." );
+// writer.write( NEWLINE );
+// writer.write( NEWLINE );
+// writer.write( "Reason: " );
+// writer.write( cause.getMessage() );
+// writer.write( NEWLINE );
+//
+// result = true;
+// }
else if ( cause instanceof IOException )
{
writer.write( NEWLINE );
@@ -745,22 +743,22 @@
result = true;
}
- else if ( cause instanceof InvalidRepositoryException )
- {
- writer.write( NEWLINE );
- writer.write( "You have an invalid repository/pluginRepository declaration in your POM:" );
- writer.write( NEWLINE );
- writer.write( NEWLINE );
- writer.write( "Repository-Id: " );
- writer.write( ((InvalidRepositoryException)cause).getRepositoryId() );
- writer.write( NEWLINE );
- writer.write( NEWLINE );
- writer.write( "Reason: " );
- writer.write( cause.getMessage() );
- writer.write( NEWLINE );
-
- result = true;
- }
+// else if ( cause instanceof InvalidRepositoryException )
+// {
+// writer.write( NEWLINE );
+// writer.write( "You have an invalid repository/pluginRepository declaration in your POM:" );
+// writer.write( NEWLINE );
+// writer.write( NEWLINE );
+// writer.write( "Repository-Id: " );
+// writer.write( ((InvalidRepositoryException)cause).getRepositoryId() );
+// writer.write( NEWLINE );
+// writer.write( NEWLINE );
+// writer.write( "Reason: " );
+// writer.write( cause.getMessage() );
+// writer.write( NEWLINE );
+//
+// result = true;
+// }
writer.write( NEWLINE );
writer.write( "Failing project's id: " );
Added: maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/PBEDerivativeReporterAspect.aj
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/PBEDerivativeReporterAspect.aj?rev=598748&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/PBEDerivativeReporterAspect.aj (added)
+++ maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/PBEDerivativeReporterAspect.aj Tue Nov 27 11:55:04 2007
@@ -0,0 +1,255 @@
+package org.apache.maven.project.aspect;
+
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.project.artifact.MavenMetadataSource;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
+import org.apache.maven.project.InvalidProjectVersionException;
+import org.apache.maven.project.interpolation.ModelInterpolationException;
+import org.apache.maven.artifact.UnknownRepositoryLayoutException;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.MavenTools;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.DefaultMavenProjectBuilder;
+import org.apache.maven.project.InvalidProjectModelException;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.error.DefaultProjectErrorReporter;
+import org.apache.maven.project.error.ProjectErrorReporter;
+
+import java.io.File;
+import java.util.Set;
+
+public privileged aspect PBEDerivativeReporterAspect
+{
+
+ private ProjectErrorReporter reporter;
+
+ public void setProjectErrorReporter( ProjectErrorReporter reporter )
+ {
+ this.reporter = reporter;
+ }
+
+ private ProjectErrorReporter getReporter()
+ {
+ if ( reporter == null )
+ {
+ reporter = new DefaultProjectErrorReporter();
+ }
+
+ return reporter;
+ }
+
+ // UnknownRepositoryLayoutException
+
+ private pointcut mavenTools_buildDeploymentArtifactRepository( DeploymentRepository repo ):
+ call( ArtifactRepository MavenTools+.buildDeploymentArtifactRepository( DeploymentRepository ) )
+ && args( repo );
+
+ private pointcut pbldr_processProjectLogic( MavenProject project, File pomFile ):
+ execution( private MavenProject DefaultMavenProjectBuilder.processProjectLogic( MavenProject, File, .. ) )
+ && args( project, pomFile, .. );
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // ...
+ // --> DefaultMavenProjectBuilder.buildFromRepository(..)
+ // DefaultMavenProjectBuilder.build(..)
+ // --> DefaultMavenProjectBuilder.buildFromSourceFileInternal(..) (private)
+ // --> DefaultMavenProjectBuilder.buildInternal(..) (private)
+ // --> DefaultMavenProjectBuilder.processProjectLogic(..) (private)
+ // --> DefaultMavenTools.buildDeploymentArtifactRepository(..)
+ // <-- UnknownRepositoryLayoutException
+ // <---------- ProjectBuildingException
+ // =========================================================================
+ after( MavenProject project, File pomFile, DeploymentRepository repo ) throwing( UnknownRepositoryLayoutException cause ):
+ mavenTools_buildDeploymentArtifactRepository( repo ) &&
+ cflow( pbldr_processProjectLogic( project, pomFile ) )
+ {
+ getReporter().reportErrorCreatingDeploymentArtifactRepository( project, pomFile, repo, cause );
+ }
+
+ private pointcut mavenTools_buildArtifactRepository( Repository repo ):
+ call( ArtifactRepository MavenTools+.buildArtifactRepository( Repository ) )
+ && args( repo );
+
+ private boolean processingPluginRepositories = false;
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // ...
+ // --> DefaultMavenProjectBuilder.buildFromRepository(..)
+ // DefaultMavenProjectBuilder.build(..)
+ // --> DefaultMavenProjectBuilder.buildFromSourceFileInternal(..) (private)
+ // --> DefaultMavenProjectBuilder.buildInternal(..) (private)
+ // --> DefaultMavenProjectBuilder.processProjectLogic(..) (private)
+ // --> DefaultMavenTools.buildArtifactRepositories(..)
+ // --> DefaultMavenTools.buildArtifactRepository(..)
+ // <------ UnknownRepositoryLayoutException
+ // <---------- ProjectBuildingException
+ // =========================================================================
+ after( MavenProject project, File pomFile, Repository repo ) throwing( UnknownRepositoryLayoutException cause ):
+ mavenTools_buildArtifactRepository( repo ) && cflow( pbldr_processProjectLogic( project, pomFile ) )
+ {
+ getReporter().reportErrorCreatingArtifactRepository( project, pomFile, repo, cause, processingPluginRepositories );
+ }
+
+ after():
+ call( * Model+.getPluginRepositories() )
+ {
+ processingPluginRepositories = true;
+ }
+
+ after():
+ call( * Model+.getRepositories() )
+ {
+ processingPluginRepositories = false;
+ }
+
+ after( MavenProject project, File pomFile ): pbldr_processProjectLogic( project, pomFile )
+ {
+ processingPluginRepositories = false;
+ }
+
+ // ModelInterpolationException
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // ...
+ // --> DefaultMavenProjectBuilder.buildFromRepository(..)
+ // DefaultMavenProjectBuilder.build(..)
+ // --> DefaultMavenProjectBuilder.buildFromSourceFileInternal(..) (private)
+ // --> DefaultMavenProjectBuilder.buildInternal(..) (private)
+ // --> DefaultMavenProjectBuilder.processProjectLogic(..) (private)
+ // --> ModelInterpolator.interpolate(..)
+ // <-- ModelInterpolationException
+ // <---------- ProjectBuildingException
+ // =========================================================================
+ after( MavenProject project, File pomFile ) throwing( ModelInterpolationException cause ):
+ pbldr_processProjectLogic( project, pomFile )
+ {
+ getReporter().reportErrorInterpolatingModel( project, pomFile, cause );
+ }
+
+ // InvalidProjectVersionException
+
+ private pointcut pbldr_createNonDependencyArtifacts():
+ call( protected * DefaultMavenProjectBuilder.createPluginArtifacts( .. ) )
+ || call( protected * DefaultMavenProjectBuilder.createReportArtifacts( .. ) )
+ || call( protected * DefaultMavenProjectBuilder.createExtensionArtifacts( .. ) );
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // ...
+ // --> DefaultMavenProjectBuilder.buildFromRepository(..)
+ // DefaultMavenProjectBuilder.build(..)
+ // --> DefaultMavenProjectBuilder.buildFromSourceFileInternal(..) (private)
+ // --> DefaultMavenProjectBuilder.buildInternal(..) (private)
+ // --> DefaultMavenProjectBuilder.processProjectLogic(..) (private)
+ // --> DefaultMavenProjectBuilder.createPluginArtifacts(..)
+ // --> DefaultMavenProjectBuilder.createReportArtifacts(..)
+ // --> DefaultMavenProjectBuilder.createExtensionArtifacts(..)
+ // <-- InvalidProjectVersionException
+ // <---------- ProjectBuildingException
+ // =========================================================================
+ after( MavenProject project, File pomFile ) throwing( ProjectBuildingException cause ):
+ cflow( pbldr_processProjectLogic( project, pomFile ) )
+ && pbldr_createNonDependencyArtifacts()
+ {
+ if ( cause instanceof InvalidProjectVersionException )
+ {
+ getReporter().reportBadNonDependencyProjectArtifactVersion( project, pomFile, (InvalidProjectVersionException) cause );
+ }
+ }
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // ...
+ // --> DefaultMavenProjectBuilder.buildFromRepository(..)
+ // DefaultMavenProjectBuilder.build(..)
+ // --> DefaultMavenProjectBuilder.buildFromSourceFileInternal(..) (private)
+ // --> DefaultMavenProjectBuilder.buildInternal(..) (private)
+ // --> DefaultMavenProjectBuilder.processProjectLogic(..) (private)
+ // --> (model validator result)
+ // <-- InvalidProjectModelException
+ // <------ ProjectBuildingException
+ // =========================================================================
+ after( MavenProject project, File pomFile ) throwing( InvalidProjectModelException cause ):
+ cflow( pbldr_processProjectLogic( project, pomFile ) )
+ && execution( void DefaultMavenProjectBuilder.validateModel( .. ) )
+ {
+ getReporter().reportProjectValidationFailure( project, pomFile, cause );
+ }
+
+
+ // InvalidDependencyVersionException
+
+ private pointcut pbldr_buildInternal():
+ execution( * DefaultMavenProjectBuilder.buildInternal( .. ) );
+
+ private MavenProject projectBeingBuilt;
+
+ after( MavenProject project ):
+ cflow( pbldr_buildInternal() )
+ && !cflowbelow( pbldr_buildInternal() )
+ && call( DependencyManagement MavenProject.getDependencyManagement() )
+ && target( project )
+ {
+ projectBeingBuilt = project;
+ }
+
+ after(): pbldr_buildInternal()
+ {
+ projectBeingBuilt = null;
+ }
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // ...
+ // --> DefaultMavenProjectBuilder.buildFromRepository(..)
+ // DefaultMavenProjectBuilder.build(..)
+ // --> DefaultMavenProjectBuilder.buildFromSourceFileInternal(..) (private)
+ // --> DefaultMavenProjectBuilder.buildInternal(..) (private)
+ // --> DefaultMavenProjectBuilder.createManagedVersionMap(..) (private)
+ // <-- InvalidDependencyVersionException
+ // <------ ProjectBuildingException
+ // =========================================================================
+ after( File pomFile ) throwing( ProjectBuildingException cause ):
+ cflow( pbldr_buildInternal() )
+ && execution( * DefaultMavenProjectBuilder.createManagedVersionMap( .., File ) )
+ && args( .., pomFile )
+ {
+ if ( cause instanceof InvalidDependencyVersionException )
+ {
+ getReporter().reportBadManagedDependencyVersion( projectBeingBuilt, pomFile, (InvalidDependencyVersionException) cause );
+ }
+ }
+
+ protected pointcut mms_createArtifacts( MavenProject project ):
+ call( public static Set MavenMetadataSource.createArtifacts( .., MavenProject ) )
+ && args( .., project );
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // ...
+ // --> MavenProject.createArtifacts(..)
+ // --> MavenMetadataSource.createArtifacts(..)
+ // <-- InvalidDependencyVersionException
+ // <-- ProjectBuildingException
+ // =========================================================================
+ after( MavenProject project ) throwing( InvalidDependencyVersionException cause ):
+ cflow( execution( * MavenProject.createArtifacts( .. ) ) )
+ && mms_createArtifacts( project )
+ {
+ getReporter().reportBadDependencyVersion( project, project.getFile(), cause );
+ }
+
+}
Added: maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/ProfileErrorReporterAspect.aj
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/ProfileErrorReporterAspect.aj?rev=598748&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/ProfileErrorReporterAspect.aj (added)
+++ maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/ProfileErrorReporterAspect.aj Tue Nov 27 11:55:04 2007
@@ -0,0 +1,255 @@
+package org.apache.maven.project.aspect;
+
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.error.DefaultProjectErrorReporter;
+import org.apache.maven.project.error.ProjectErrorReporter;
+import org.apache.maven.profiles.activation.ProfileActivator;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Repository;
+import org.apache.maven.profiles.activation.ProfileActivationContext;
+import org.apache.maven.profiles.activation.ProfileActivationException;
+import org.apache.maven.profiles.build.DefaultProfileAdvisor;
+import org.apache.maven.model.Profile;
+import org.apache.maven.profiles.DefaultProfileManager;
+import org.apache.maven.profiles.MavenProfilesBuilder;
+import org.apache.maven.profiles.ProfilesRoot;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.MavenTools;
+
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.codehaus.plexus.PlexusContainer;
+
+import java.util.List;
+import java.util.LinkedHashSet;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Error reporting advice to handle {@link ProjectBuildingException} instances
+ * coming from {@link DefaultProfileAdvisor}.
+ */
+public privileged aspect ProfileErrorReporterAspect
+{
+ private ProjectErrorReporter reporter;
+
+ public void setProjectErrorReporter( ProjectErrorReporter reporter )
+ {
+ this.reporter = reporter;
+ }
+
+ private ProjectErrorReporter getReporter()
+ {
+ if ( reporter == null )
+ {
+ reporter = new DefaultProjectErrorReporter();
+ }
+
+ return reporter;
+ }
+
+ protected pointcut componentLookupException( ComponentLookupException cause ):
+ handler( ComponentLookupException )
+ && args( cause );
+
+ private pointcut pMgr_isActiveExec( Profile profile, ProfileActivationContext context ):
+ execution( boolean DefaultProfileManager.isActive( Profile, ProfileActivationContext ) )
+ && args( profile, context );
+
+ private pointcut pAdv_applyActivatedProfiles( Model model, File pomFile ):
+ execution( private List DefaultProfileAdvisor.applyActivatedProfiles( Model, File, .. ) )
+ && args( model, pomFile, .. );
+
+ private pointcut applyActivatedProfiles_ComponentLookupException( Model model,
+ File pomFile,
+ Profile profile ):
+ call( List PlexusContainer+.lookupList( .. ) )
+ && cflow( pAdv_applyActivatedProfiles( model, pomFile ) )
+ && cflow( pMgr_isActiveExec( profile, ProfileActivationContext ) );
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // DefaultProfileAdvisor.applyActivatedProfiles(..)
+ // DefaultProfileAdvisor.applyActivatedExternalProfiles(..)
+ // --> DefaultProfileAdvisor.applyActivatedProfiles(..) (private)
+ // --> DefaultProfileManager.getActiveProfiles(..)
+ // --> DefaultProfileManager.isActive(..) (private)
+ // --> PlexusContainer.lookupList(..)
+ // <-- ComponentLookupException
+ // <-- ProfileActivationException
+ // <------ ProjectBuildingException
+ // =========================================================================
+ after( Model model, File pomFile, Profile profile )
+ throwing( ComponentLookupException cause ):
+ applyActivatedProfiles_ComponentLookupException( model, pomFile, profile )
+ {
+ getReporter().reportActivatorLookupErrorWhileApplyingProfiles( model, pomFile, profile, cause );
+ }
+
+ protected pointcut profileActivatorCall( ProfileActivator activator ):
+ call( * ProfileActivator+.*( .. ) )
+ && target( activator );
+
+ private pointcut applyActivatedProfiles_ActivatorThrown( ProfileActivator activator,
+ Model model,
+ File pomFile,
+ Profile profile,
+ ProfileActivationContext context ):
+ profileActivatorCall( activator )
+ && cflow( pAdv_applyActivatedProfiles( model, pomFile ) )
+ && cflow( pMgr_isActiveExec( profile, context ) );
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // DefaultProfileAdvisor.applyActivatedProfiles(..)
+ // DefaultProfileAdvisor.applyActivatedExternalProfiles(..)
+ // --> DefaultProfileAdvisor.applyActivatedProfiles(..) (private)
+ // --> DefaultProfileManager.getActiveProfiles(..)
+ // --> DefaultProfileManager.isActive(..) (private)
+ // --> ProfileActivator.canDetermineActivation(..)
+ // --> ProfileActivator.isActive(..)
+ // <------ ProfileActivationException
+ // <------ ProjectBuildingException
+ // =========================================================================
+ after( ProfileActivator activator, Model model, File pomFile, Profile profile, ProfileActivationContext context )
+ throwing( ProfileActivationException cause ):
+ applyActivatedProfiles_ActivatorThrown( activator, model, pomFile, profile, context )
+ {
+ getReporter().reportActivatorErrorWhileApplyingProfiles( activator, model, pomFile, profile, context, cause );
+ }
+
+ private pointcut pAdv_loadExternalProjectProfiles( Model model, File pomFile ):
+ execution( private void DefaultProfileAdvisor.loadExternalProjectProfiles( *, Model, File ) )
+ && args( *, model, pomFile );
+
+ private pointcut loadExternalProfiles_profileBuilding( Model model,
+ File pomFile,
+ File projectDir ):
+ call( ProfilesRoot MavenProfilesBuilder+.buildProfiles( File ) )
+ && cflow( pAdv_loadExternalProjectProfiles( model, pomFile ) )
+ && args( projectDir );
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // DefaultProfileAdvisor.applyActivatedProfiles(..)
+ // DefaultProfileAdvisor.getArtifactRepositoriesFromActiveProfiles(..)
+ // --> DefaultProfileAdvisor.buildProfileManager(..) (private)
+ // --> DefaultProfileAdvisor.loadExternalProjectProfiles(..) (private)
+ // --> MavenProfilesBuilder.buildProfiles(..)
+ // <-- IOException
+ // <------ ProjectBuildingException
+ // =========================================================================
+ after( Model model, File pomFile, File projectDir )
+ throwing( IOException cause ):
+ loadExternalProfiles_profileBuilding( model, pomFile, projectDir )
+ {
+ getReporter().reportErrorLoadingExternalProfilesFromFile( model, pomFile, projectDir, cause );
+ }
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // DefaultProfileAdvisor.applyActivatedProfiles(..)
+ // DefaultProfileAdvisor.getArtifactRepositoriesFromActiveProfiles(..)
+ // --> DefaultProfileAdvisor.buildProfileManager(..) (private)
+ // --> DefaultProfileAdvisor.loadExternalProjectProfiles(..) (private)
+ // --> MavenProfilesBuilder.buildProfiles(..)
+ // <-- XmlPullParserException
+ // <------ ProjectBuildingException
+ // =========================================================================
+ after( Model model, File pomFile, File projectDir )
+ throwing( XmlPullParserException cause ):
+ loadExternalProfiles_profileBuilding( model, pomFile, projectDir )
+ {
+ getReporter().reportErrorLoadingExternalProfilesFromFile( model, pomFile, projectDir, cause );
+ }
+
+ private pointcut pAdv_getArtifactRepositoriesFromActiveProfiles( String projectId, File pomFile ):
+ execution( LinkedHashSet DefaultProfileAdvisor.getArtifactRepositoriesFromActiveProfiles( *, File, String ) )
+ && args( *, pomFile, projectId );
+
+ private pointcut getArtifactRepositoriesFromActiveProfiles_ComponentLookupException( String projectId,
+ File pomFile,
+ Profile profile ):
+ call( List PlexusContainer+.lookupList( .. ) )
+ && cflow( pAdv_getArtifactRepositoriesFromActiveProfiles( projectId, pomFile ) )
+ && cflow( pMgr_isActiveExec( profile, ProfileActivationContext ) );
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // DefaultProfileAdvisor.applyActivatedProfiles(..)
+ // DefaultProfileAdvisor.applyActivatedExternalProfiles(..)
+ // --> DefaultProfileAdvisor.getArtifactRepositoriesFromActiveProfiles(..)
+ // --> DefaultProfileManager.getActiveProfiles(..)
+ // --> DefaultProfileManager.isActive(..) (private)
+ // --> PlexusContainer.lookupList(..)
+ // <-- ComponentLookupException
+ // <-- ProfileActivationException
+ // <------ ProjectBuildingException
+ // =========================================================================
+ after( String projectId, File pomFile, Profile profile )
+ throwing( ComponentLookupException cause ):
+ getArtifactRepositoriesFromActiveProfiles_ComponentLookupException( projectId, pomFile, profile )
+ {
+ getReporter().reportActivatorLookupErrorWhileGettingRepositoriesFromProfiles( projectId, pomFile, profile, cause );
+ }
+
+ private pointcut getArtifactRepositoriesFromActiveProfiles_ActivatorThrown( ProfileActivator activator,
+ String projectId,
+ File pomFile,
+ Profile profile,
+ ProfileActivationContext context ):
+ profileActivatorCall( activator )
+ && cflow( pAdv_getArtifactRepositoriesFromActiveProfiles( projectId, pomFile ) )
+ && cflow( pMgr_isActiveExec( profile, context ) );
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // DefaultProfileAdvisor.applyActivatedProfiles(..)
+ // DefaultProfileAdvisor.applyActivatedExternalProfiles(..)
+ // --> DefaultProfileAdvisor.getArtifactRepositoriesFromActiveProfiles(..)
+ // --> DefaultProfileManager.getActiveProfiles(..)
+ // --> DefaultProfileManager.isActive(..) (private)
+ // --> ProfileActivator.canDetermineActivation(..)
+ // --> ProfileActivator.isActive(..)
+ // <------ ProfileActivationException
+ // <------ ProjectBuildingException
+ // =========================================================================
+ after( ProfileActivator activator, String projectId, File pomFile, Profile profile, ProfileActivationContext context )
+ throwing( ProfileActivationException cause ):
+ getArtifactRepositoriesFromActiveProfiles_ActivatorThrown( activator, projectId, pomFile, profile, context )
+ {
+ getReporter().reportActivatorErrorWhileGettingRepositoriesFromProfiles( activator, projectId, pomFile, profile, context, cause );
+ }
+
+ private pointcut getArtifactRepositoriesFromActiveProfiles_InvalidRepository( Repository repo,
+ String projectId,
+ File pomFile ):
+ call( ArtifactRepository MavenTools+.buildArtifactRepository( Repository ) )
+ && args( repo )
+ && cflow( pAdv_getArtifactRepositoriesFromActiveProfiles( projectId, pomFile ) );
+
+ // =========================================================================
+ // Call Stack:
+ // =========================================================================
+ // DefaultProfileAdvisor.applyActivatedProfiles(..)
+ // DefaultProfileAdvisor.applyActivatedExternalProfiles(..)
+ // --> DefaultProfileAdvisor.getArtifactRepositoriesFromActiveProfiles(..)
+ // --> MavenTools.buildArtifactRepository(..)
+ // <-- InvalidRepositoryException
+ // <-- ProjectBuildingException
+ // =========================================================================
+ after( Repository repo, String projectId, File pomFile )
+ throwing( InvalidRepositoryException cause ):
+ getArtifactRepositoriesFromActiveProfiles_InvalidRepository( repo, projectId, pomFile )
+ {
+ getReporter().reportInvalidRepositoryWhileGettingRepositoriesFromProfiles( repo, projectId, pomFile, cause );
+ }
+
+}
Modified: maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/ProjectCacheAspect.aj
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/ProjectCacheAspect.aj?rev=598748&r1=598747&r2=598748&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/ProjectCacheAspect.aj (original)
+++ maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/ProjectCacheAspect.aj Tue Nov 27 11:55:04 2007
@@ -19,7 +19,7 @@
public privileged aspect ProjectCacheAspect
{
- private Map DefaultMavenProjectBuilder.projectCache = new HashMap();
+ private Map<Object, MavenProject> DefaultMavenProjectBuilder.projectCache = new HashMap<Object, MavenProject>();
public void DefaultMavenProjectBuilder.clearProjectCache()
{
@@ -159,7 +159,7 @@
return groupId + ":" + artifactId + ":" + version;
}
- private Map DefaultModelLineageBuilder.modelAndFileCache = new HashMap();
+ private Map<Object, ModelAndFile> DefaultModelLineageBuilder.modelAndFileCache = new HashMap<Object, ModelAndFile>();
public void DefaultModelLineageBuilder.clearModelAndFileCache()
{
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=598748&r1=598747&r2=598748&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Tue Nov 27 11:55:04 2007
@@ -864,20 +864,13 @@
project.setParentArtifact( parentArtifact );
}
- // Must validate before artifact construction to make sure dependencies are good
- ModelValidationResult validationResult = validator.validate( model );
-
- String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() );
-
- if ( validationResult.getMessageCount() > 0 )
- {
- throw new InvalidProjectModelException( projectId, "Failed to validate POM", pomFile,
- validationResult );
- }
+ validateModel( model, pomFile );
project.setRemoteArtifactRepositories(
mavenTools.buildArtifactRepositories( model.getRepositories() ) );
+ String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() );
+
// TODO: these aren't taking active project artifacts into consideration in the reactor
project.setPluginArtifacts( createPluginArtifacts( projectId, project.getBuildPlugins(), pomFile ) );
@@ -888,6 +881,22 @@
return project;
}
+ private void validateModel( Model model,
+ File pomFile )
+ throws InvalidProjectModelException
+ {
+ // Must validate before artifact construction to make sure dependencies are good
+ ModelValidationResult validationResult = validator.validate( model );
+
+ String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() );
+
+ if ( validationResult.getMessageCount() > 0 )
+ {
+ throw new InvalidProjectModelException( projectId, "Failed to validate POM", pomFile,
+ validationResult );
+ }
+ }
+
/**
* @param validProfilesXmlLocation
* @noinspection CollectionDeclaredAsConcreteClass
@@ -1083,9 +1092,7 @@
}
catch ( InvalidVersionSpecificationException e )
{
- throw new ProjectBuildingException( projectId, "Unable to parse version '" + version +
- "' for plugin '" + ArtifactUtils.versionlessKey( p.getGroupId(), p.getArtifactId() ) + "': " +
- e.getMessage(), pomLocation, e );
+ throw new InvalidProjectVersionException( projectId, "Plugin: " + p.getKey(), version, pomLocation, e );
}
if ( artifact != null )
@@ -1144,9 +1151,7 @@
}
catch ( InvalidVersionSpecificationException e )
{
- throw new ProjectBuildingException( projectId, "Unable to parse version '" + version +
- "' for report '" + ArtifactUtils.versionlessKey( p.getGroupId(), p.getArtifactId() ) + "': " +
- e.getMessage(), pomLocation, e );
+ throw new InvalidProjectVersionException( projectId, "Report plugin: " + p.getKey(), version, pomLocation, e );
}
if ( artifact != null )
@@ -1208,7 +1213,7 @@
catch ( InvalidVersionSpecificationException e )
{
String key = ArtifactUtils.versionlessKey( ext.getGroupId(), ext.getArtifactId() );
- throw new InvalidProjectVersionException( projectId, "extension '" + key,
+ throw new InvalidProjectVersionException( projectId, "Extension: " + key,
version, pomFile, e );
}
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java?rev=598748&r1=598747&r2=598748&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java Tue Nov 27 11:55:04 2007
@@ -45,7 +45,7 @@
private static String formatLocationInPom( Dependency dependency )
{
- return "dependency: " + ArtifactUtils.versionlessKey( dependency.getGroupId(), dependency.getArtifactId() );
+ return "Dependency: " + ArtifactUtils.versionlessKey( dependency.getGroupId(), dependency.getArtifactId() );
}
public Dependency getDependency()
Added: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/DefaultProjectErrorReporter.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/DefaultProjectErrorReporter.java?rev=598748&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/DefaultProjectErrorReporter.java (added)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/DefaultProjectErrorReporter.java Tue Nov 27 11:55:04 2007
@@ -0,0 +1,560 @@
+package org.apache.maven.project.error;
+
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.UnknownRepositoryLayoutException;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.Repository;
+import org.apache.maven.profiles.activation.ProfileActivationContext;
+import org.apache.maven.profiles.activation.ProfileActivationException;
+import org.apache.maven.profiles.activation.ProfileActivator;
+import org.apache.maven.project.InvalidProjectModelException;
+import org.apache.maven.project.InvalidProjectVersionException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
+import org.apache.maven.project.interpolation.ModelInterpolationException;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+public class DefaultProjectErrorReporter
+ implements ProjectErrorReporter
+{
+
+ private Map<Throwable, String> formattedMessages = new HashMap<Throwable, String>();
+
+ private Map<Throwable, Throwable> realCauses = new HashMap<Throwable, Throwable>();
+
+ /**
+ * @see org.apache.maven.project.error.ProjectErrorReporter#clearErrors()
+ */
+ public void clearErrors()
+ {
+ formattedMessages.clear();
+ realCauses.clear();
+ }
+
+ /**
+ * @see org.apache.maven.project.error.ProjectErrorReporter#hasInformationFor(java.lang.Throwable)
+ */
+ public Throwable findReportedException( Throwable error )
+ {
+ if ( formattedMessages.containsKey( error ) )
+ {
+ return error;
+ }
+ else if ( error.getCause() != null )
+ {
+ return findReportedException( error.getCause() );
+ }
+
+ return null;
+ }
+
+ /**
+ * @see org.apache.maven.project.error.ProjectErrorReporter#getFormattedMessage(java.lang.Throwable)
+ */
+ public String getFormattedMessage( Throwable error )
+ {
+ return formattedMessages.get( error );
+ }
+
+ /**
+ * @see org.apache.maven.project.error.ProjectErrorReporter#getRealCause(java.lang.Throwable)
+ */
+ public Throwable getRealCause( Throwable error )
+ {
+ return realCauses.get( error );
+ }
+
+ private void registerProjectBuildError( Throwable error,
+ String formattedMessage,
+ Throwable realCause )
+ {
+ formattedMessages.put( error, formattedMessage );
+ realCauses.put( error, realCause );
+ }
+
+ private void registerProjectBuildError( Throwable error,
+ String formattedMessage )
+ {
+ formattedMessages.put( error, formattedMessage );
+ }
+
+ /**
+ * @see org.apache.maven.project.error.ProjectErrorReporter#reportActivatorErrorWhileApplyingProfiles(org.apache.maven.profiles.activation.ProfileActivator, org.apache.maven.model.Model, java.io.File, org.apache.maven.model.Profile, org.apache.maven.profiles.activation.ProfileActivationContext, org.apache.maven.profiles.activation.ProfileActivationException)
+ */
+ public void reportActivatorErrorWhileApplyingProfiles( ProfileActivator activator,
+ Model model,
+ File pomFile,
+ Profile profile,
+ ProfileActivationContext context,
+ ProfileActivationException cause )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "Profile activator: " );
+ writer.write( activator.getClass().getName() );
+ writer.write( " experienced an error while processing profile:" );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( profile.getId() );
+ writer.write( " (source: " );
+ writer.write( profile.getSource() );
+ writer.write( ")" );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Error message: " );
+ writer.write( NEWLINE );
+ writer.write( cause.getMessage() );
+
+ addStandardInfo( model.getId(), pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForActivatorErrorWhileApplyingProfiles( activator,
+ model,
+ pomFile,
+ profile,
+ context,
+ cause ), writer );
+
+ registerProjectBuildError( cause, writer.toString(), cause.getCause() );
+ }
+
+ /**
+ * @see org.apache.maven.project.error.ProjectErrorReporter#reportActivatorErrorWhileGettingRepositoriesFromProfiles(org.apache.maven.profiles.activation.ProfileActivator, java.lang.String, java.io.File, org.apache.maven.model.Profile, org.apache.maven.profiles.activation.ProfileActivationContext, org.apache.maven.profiles.activation.ProfileActivationException)
+ */
+ public void reportActivatorErrorWhileGettingRepositoriesFromProfiles( ProfileActivator activator,
+ String projectId,
+ File pomFile,
+ Profile profile,
+ ProfileActivationContext context,
+ ProfileActivationException cause )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "Profile activator: " );
+ writer.write( activator.getClass().getName() );
+ writer.write( " experienced an error while processing profile:" );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( profile.getId() );
+ writer.write( " (source: " );
+ writer.write( profile.getSource() );
+ writer.write( ")" );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Error message: " );
+ writer.write( NEWLINE );
+ writer.write( cause.getMessage() );
+
+ addStandardInfo( projectId, pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForActivatorErrorWhileGettingRepositoriesFromProfiles( activator,
+ projectId,
+ pomFile,
+ profile,
+ context,
+ cause ),
+ writer );
+
+ registerProjectBuildError( cause, writer.toString(), cause.getCause() );
+ }
+
+ /**
+ * @see org.apache.maven.project.error.ProjectErrorReporter#reportActivatorLookupErrorWhileApplyingProfiles(org.apache.maven.model.Model, java.io.File, org.apache.maven.model.Profile, org.codehaus.plexus.component.repository.exception.ComponentLookupException)
+ */
+ public void reportActivatorLookupErrorWhileApplyingProfiles( Model model,
+ File pomFile,
+ Profile profile,
+ ComponentLookupException cause )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "Error retrieving profile-activator component while processing profile:" );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( profile.getId() );
+ writer.write( " (source: " );
+ writer.write( profile.getSource() );
+ writer.write( ")" );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Error message: " );
+ writer.write( NEWLINE );
+ writer.write( cause.getMessage() );
+
+ addStandardInfo( model.getId(), pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForActivatorLookupErrorWhileApplyingProfiles( model,
+ pomFile,
+ profile,
+ cause ),
+ writer );
+
+ registerProjectBuildError( cause, writer.toString(), cause.getCause() );
+ }
+
+ /**
+ * @see org.apache.maven.project.error.ProjectErrorReporter#reportActivatorLookupErrorWhileGettingRepositoriesFromProfiles(java.lang.String, java.io.File, org.apache.maven.model.Profile, org.codehaus.plexus.component.repository.exception.ComponentLookupException)
+ */
+ public void reportActivatorLookupErrorWhileGettingRepositoriesFromProfiles( String projectId,
+ File pomFile,
+ Profile profile,
+ ComponentLookupException cause )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "Error retrieving profile-activator component while processing profile:" );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( profile.getId() );
+ writer.write( " (source: " );
+ writer.write( profile.getSource() );
+ writer.write( ")" );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Error message: " );
+ writer.write( NEWLINE );
+ writer.write( cause.getMessage() );
+
+ addStandardInfo( projectId, pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForActivatorLookupErrorWhileGettingRepositoriesFromProfiles( projectId,
+ pomFile,
+ profile,
+ cause ),
+ writer );
+
+ registerProjectBuildError( cause, writer.toString(), cause.getCause() );
+ }
+
+ /**
+ * @see org.apache.maven.project.error.ProjectErrorReporter#reportErrorLoadingExternalProfilesFromFile(org.apache.maven.model.Model, java.io.File, java.io.File, java.io.IOException)
+ */
+ public void reportErrorLoadingExternalProfilesFromFile( Model model,
+ File pomFile,
+ File projectDir,
+ IOException cause )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "Failed to load external profiles from project directory: " );
+ writer.write( NEWLINE );
+ writer.write( String.valueOf( projectDir ) );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Error message: " );
+ writer.write( NEWLINE );
+ writer.write( cause.getMessage() );
+
+ addStandardInfo( model.getId(), pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForErrorLoadingExternalProfilesFromFile( model,
+ pomFile,
+ projectDir,
+ cause ), writer );
+
+ registerProjectBuildError( cause, writer.toString(), cause.getCause() );
+ }
+
+ /**
+ * @see org.apache.maven.project.error.ProjectErrorReporter#reportErrorLoadingExternalProfilesFromFile(org.apache.maven.model.Model, java.io.File, java.io.File, org.codehaus.plexus.util.xml.pull.XmlPullParserException)
+ */
+ public void reportErrorLoadingExternalProfilesFromFile( Model model,
+ File pomFile,
+ File projectDir,
+ XmlPullParserException cause )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "Failed to load external profiles from project directory: " );
+ writer.write( NEWLINE );
+ writer.write( String.valueOf( projectDir ) );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Error message: " );
+ writer.write( NEWLINE );
+ writer.write( cause.getMessage() );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Line: " );
+ writer.write( cause.getLineNumber() );
+ writer.write( NEWLINE );
+ writer.write( "Column: " );
+ writer.write( cause.getColumnNumber() );
+
+ addStandardInfo( model.getId(), pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForErrorLoadingExternalProfilesFromFile( model,
+ pomFile,
+ projectDir,
+ cause ), writer );
+
+ registerProjectBuildError( cause, writer.toString(), cause.getCause() );
+ }
+
+ /**
+ * @see org.apache.maven.project.error.ProjectErrorReporter#reportInvalidRepositoryWhileGettingRepositoriesFromProfiles(org.apache.maven.model.Repository, java.lang.String, java.io.File, org.apache.maven.artifact.InvalidRepositoryException)
+ */
+ public void reportInvalidRepositoryWhileGettingRepositoriesFromProfiles( Repository repo,
+ String projectId,
+ File pomFile,
+ InvalidRepositoryException cause )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "Invalid repository declaration: " );
+ writer.write( repo.getId() );
+ writer.write( NEWLINE );
+ writer.write( "(URL: " );
+ writer.write( repo.getUrl() );
+ writer.write( ")" );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Error message: " );
+ writer.write( NEWLINE );
+ writer.write( cause.getMessage() );
+
+ addStandardInfo( projectId, pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForInvalidRepositorySpec( repo, projectId, pomFile, cause ),
+ writer );
+
+ registerProjectBuildError( cause, writer.toString(), cause.getCause() );
+ }
+
+ private void addStandardInfo( String projectId,
+ File pomFile,
+ StringWriter writer )
+ {
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "While applying profile to: " );
+ writer.write( projectId );
+ writer.write( NEWLINE );
+ writer.write( "From file: " );
+ writer.write( String.valueOf( pomFile ) );
+ }
+
+ private void addTips( List<String> tips,
+ StringWriter writer )
+ {
+ if ( ( tips != null ) && !tips.isEmpty() )
+ {
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Some tips:" );
+ for ( String tip : tips )
+ {
+ writer.write( NEWLINE );
+ writer.write( "\t- " );
+ writer.write( tip );
+ }
+ }
+ }
+
+ public void reportErrorCreatingArtifactRepository( MavenProject project,
+ File pomFile,
+ Repository repo,
+ UnknownRepositoryLayoutException cause,
+ boolean isPluginRepo )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "You have an invalid repository/pluginRepository declaration in your POM:" );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Repository-Id: " );
+ writer.write( ((InvalidRepositoryException)cause).getRepositoryId() );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Reason: " );
+ writer.write( cause.getMessage() );
+ writer.write( NEWLINE );
+
+ addStandardInfo( project.getId(), pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForInvalidRepositorySpec( repo, project.getId(), pomFile, cause ),
+ writer );
+
+ registerProjectBuildError( cause, writer.toString() );
+ }
+
+ public void reportErrorCreatingDeploymentArtifactRepository( MavenProject project,
+ File pomFile,
+ DeploymentRepository repo,
+ UnknownRepositoryLayoutException cause )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "You have an invalid repository/snapshotRepository declaration in the <distributionManagement/> section of your POM:" );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Repository-Id: " );
+ writer.write( ((InvalidRepositoryException)cause).getRepositoryId() );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Reason: " );
+ writer.write( cause.getMessage() );
+ writer.write( NEWLINE );
+
+ addStandardInfo( project.getId(), pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForInvalidRepositorySpec( repo, project.getId(), pomFile, cause ),
+ writer );
+
+ registerProjectBuildError( cause, writer.toString() );
+ }
+
+ public void reportBadNonDependencyProjectArtifactVersion( MavenProject project,
+ File pomFile,
+ InvalidProjectVersionException cause )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "You have an invalid version in your POM:" );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Location: " );
+ writer.write( cause.getLocationInPom() );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+ writer.write( "Reason: " );
+ writer.write( cause.getMessage() );
+ writer.write( NEWLINE );
+
+ addStandardInfo( project.getId(), pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForBadNonDependencyArtifactSpec( project, pomFile, cause ),
+ writer );
+
+ registerProjectBuildError( cause, writer.toString() );
+ }
+
+ public void reportErrorInterpolatingModel( MavenProject project,
+ File pomFile,
+ ModelInterpolationException cause )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "You have an invalid expression in your POM (interpolation failed):" );
+ writer.write( NEWLINE );
+ writer.write( cause.getMessage() );
+
+ addStandardInfo( project.getId(), pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForProjectInterpolationError( project, pomFile, cause ),
+ writer );
+
+ registerProjectBuildError( cause, writer.toString() );
+ }
+
+ public void reportProjectValidationFailure( MavenProject project,
+ File pomFile,
+ InvalidProjectModelException error )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "The following POM validation errors were detected:" );
+ writer.write( NEWLINE );
+
+ for ( Iterator it = error.getValidationResult().getMessages().iterator(); it.hasNext(); )
+ {
+ String message = (String) it.next();
+ writer.write( NEWLINE );
+ writer.write( " - " );
+ writer.write( message );
+ }
+
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+
+ addStandardInfo( project.getId(), pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForProjectValidationFailure( project, pomFile, error.getValidationResult() ),
+ writer );
+
+ registerProjectBuildError( error, writer.toString() );
+ }
+
+ public void reportBadManagedDependencyVersion( MavenProject project,
+ File pomFile,
+ InvalidDependencyVersionException cause )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "Your project declares a dependency with an invalid version inside its <dependencyManagement/> section." );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+
+ Dependency dep = cause.getDependency();
+ writer.write( "Dependency:" );
+ writer.write( NEWLINE );
+ writer.write( "Group-Id: " );
+ writer.write( dep.getGroupId() );
+ writer.write( NEWLINE );
+ writer.write( "Artifact-Id: " );
+ writer.write( dep.getArtifactId() );
+ writer.write( NEWLINE );
+ writer.write( "Version: " );
+ writer.write( dep.getVersion() );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+
+ writer.write( "Reason: " );
+ writer.write( cause.getMessage() );
+ writer.write( NEWLINE );
+
+ addStandardInfo( project.getId(), pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForBadDependencySpec( project, pomFile, dep ),
+ writer );
+
+ registerProjectBuildError( cause, writer.toString() );
+ }
+
+ public void reportBadDependencyVersion( MavenProject project,
+ File pomFile,
+ InvalidDependencyVersionException cause )
+ {
+ StringWriter writer = new StringWriter();
+
+ writer.write( NEWLINE );
+ writer.write( "Your project declares a dependency with an invalid version." );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+
+ Dependency dep = cause.getDependency();
+ writer.write( "Dependency:" );
+ writer.write( NEWLINE );
+ writer.write( "Group-Id: " );
+ writer.write( dep.getGroupId() );
+ writer.write( NEWLINE );
+ writer.write( "Artifact-Id: " );
+ writer.write( dep.getArtifactId() );
+ writer.write( NEWLINE );
+ writer.write( "Version: " );
+ writer.write( dep.getVersion() );
+ writer.write( NEWLINE );
+ writer.write( NEWLINE );
+
+ writer.write( "Reason: " );
+ writer.write( cause.getMessage() );
+ writer.write( NEWLINE );
+
+ addStandardInfo( project.getId(), pomFile, writer );
+ addTips( ProjectErrorTips.getTipsForBadDependencySpec( project, pomFile, dep ),
+ writer );
+
+ registerProjectBuildError( cause, writer.toString() );
+ }
+}
Propchange: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/DefaultProjectErrorReporter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/error/DefaultProjectErrorReporter.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"