diff --git a/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj b/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj index e1f2d3b836..fcdde5a49b 100644 --- a/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj +++ b/maven-core/src/main/aspect/org/apache/maven/errors/LifecycleErrorReporterAspect.aj @@ -4,9 +4,8 @@ import org.codehaus.plexus.logging.console.ConsoleLogger; import org.codehaus.plexus.logging.Logger; import org.apache.maven.project.path.PathTranslator; import org.apache.maven.plugin.MojoExecution; -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.artifact.resolver.ArtifactResolutionException; +import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException; import org.apache.maven.plugin.PluginConfigurationException; import org.apache.maven.plugin.descriptor.Parameter; import org.apache.maven.plugin.loader.PluginLoaderException; @@ -217,29 +216,14 @@ public privileged aspect LifecycleErrorReporterAspect after( MavenProject project, String scope ) throwing( ArtifactResolutionException cause ): pm_resolveTransitiveDependencies( project, scope ) { - getReporter().reportProjectDependenciesUnresolvable( project, scope, cause ); - } - - private pointcut within_pm_downloadDependencies( MavenProject project ): - withincode( void DefaultPluginManager.downloadDependencies( MavenProject, .. ) ) - && args( project, .. ); - - private pointcut ar_resolve( Artifact artifact ): - call( * ArtifactResolver+.resolve( Artifact, ..) ) - && args( artifact, .. ); - - after( MavenProject project, Artifact artifact ) throwing( ArtifactNotFoundException cause ): - within_pm_downloadDependencies( project ) - && ar_resolve( artifact ) - { - getReporter().reportProjectDependencyArtifactNotFound( project, artifact, cause ); - } - - after( MavenProject project, Artifact artifact ) throwing( ArtifactResolutionException cause ): - within_pm_downloadDependencies( project ) - && ar_resolve( artifact ) - { - getReporter().reportProjectDependencyArtifactUnresolvable( project, artifact, cause ); + if ( cause instanceof MultipleArtifactsNotFoundException ) + { + getReporter().reportProjectDependenciesNotFound( project, scope, (MultipleArtifactsNotFoundException) cause ); + } + else + { + getReporter().reportProjectDependenciesUnresolvable( project, scope, cause ); + } } private pointcut le_getLifecycleBindings( List tasks, MavenProject configuringProject, String targetDescription ): diff --git a/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java b/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java index 3942a492e7..c98cc32d06 100644 --- a/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java +++ b/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java @@ -7,6 +7,7 @@ import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolutionResult; +import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException; import org.apache.maven.artifact.versioning.ArtifactVersion; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.execution.MavenExecutionRequest; @@ -112,12 +113,10 @@ public interface CoreErrorReporter void reportProjectDependenciesNotFound( MavenProject project, String scope, ArtifactNotFoundException cause ); + void reportProjectDependenciesNotFound( MavenProject project, String scope, MultipleArtifactsNotFoundException cause ); + void reportProjectDependenciesUnresolvable( MavenProject project, String scope, ArtifactResolutionException cause ); - void reportProjectDependencyArtifactNotFound( MavenProject project, Artifact artifact, ArtifactNotFoundException cause ); - - void reportProjectDependencyArtifactUnresolvable( MavenProject project, Artifact artifact, ArtifactResolutionException cause ); - void reportProjectMojoFailureException( MavenSession session, MojoBinding binding, MojoFailureException cause ); void reportReflectionErrorWhileEvaluatingMojoParameter( Parameter currentParameter, MojoBinding binding, MavenProject project, String expression, Exception cause ); diff --git a/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java b/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java index 497a86a7bb..c5d96efc21 100644 --- a/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java +++ b/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java @@ -10,6 +10,7 @@ import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolutionResult; import org.apache.maven.artifact.resolver.CyclicDependencyException; +import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException; import org.apache.maven.artifact.versioning.ArtifactVersion; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.execution.MavenExecutionRequest; @@ -643,6 +644,13 @@ public void reportProjectDependenciesNotFound( MavenProject project, reportTransitiveResolutionError( project, scope, cause ); } + public void reportProjectDependenciesNotFound( MavenProject project, + String scope, + MultipleArtifactsNotFoundException cause ) + { + reportTransitiveResolutionError( project, scope, cause ); + } + public void reportProjectDependenciesUnresolvable( MavenProject project, String scope, ArtifactResolutionException cause ) @@ -650,20 +658,6 @@ public void reportProjectDependenciesUnresolvable( MavenProject project, reportTransitiveResolutionError( project, scope, cause ); } - public void reportProjectDependencyArtifactNotFound( MavenProject project, - Artifact artifact, - ArtifactNotFoundException cause ) - { - reportArtifactError( project, artifact, cause ); - } - - public void reportProjectDependencyArtifactUnresolvable( MavenProject project, - Artifact artifact, - ArtifactResolutionException cause ) - { - reportArtifactError( project, artifact, cause ); - } - private void reportTransitiveResolutionError( MavenProject project, String scope, AbstractArtifactResolutionException cause ) @@ -692,24 +686,6 @@ private void reportTransitiveResolutionError( MavenProject project, registerBuildError( cause, writer.toString(), cause.getCause() ); } - private void reportArtifactError( MavenProject project, - Artifact depArtifact, - AbstractArtifactResolutionException cause ) - { - StringWriter writer = new StringWriter(); - - writer.write( NEWLINE ); - writer.write( "Maven could not resolve one of your project dependencies from the repository:" ); - - writeArtifactInfo( depArtifact, cause, writer, true ); - - writeProjectCoordinate( project, writer ); - addTips( CoreErrorTips.getDependencyArtifactResolutionTips( project, depArtifact, cause ), - writer ); - - registerBuildError( cause, writer.toString(), cause.getCause() ); - } - private void writeArtifactError( AbstractArtifactResolutionException cause, StringWriter writer ) { diff --git a/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesNotFound/pom.xml b/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesNotFound/pom.xml new file mode 100644 index 0000000000..69f3e19864 --- /dev/null +++ b/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesNotFound/pom.xml @@ -0,0 +1,22 @@ + + 4.0.0 + org.apache.maven.errortest + testReportProjectDependenciesNotFound + 1 + + + + central + file://${java.io.tmpdir} + + + + + + not + found + 3.8.1 + + + + \ No newline at end of file diff --git a/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesNotFound/src/main/java/org/apache/maven/test/error/mojoFailure/App.java b/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesNotFound/src/main/java/org/apache/maven/test/error/mojoFailure/App.java new file mode 100644 index 0000000000..dd4102a31b --- /dev/null +++ b/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesNotFound/src/main/java/org/apache/maven/test/error/mojoFailure/App.java @@ -0,0 +1,13 @@ +package org.apache.maven.test.error.mojoFailure; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} diff --git a/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesNotFound/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java b/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesNotFound/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java new file mode 100644 index 0000000000..39ae671829 --- /dev/null +++ b/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesNotFound/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java @@ -0,0 +1,38 @@ +package org.apache.maven.test.error.mojoFailure; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} diff --git a/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesUnresolvable/pom.xml b/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesUnresolvable/pom.xml new file mode 100644 index 0000000000..af4d45e699 --- /dev/null +++ b/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesUnresolvable/pom.xml @@ -0,0 +1,22 @@ + + 4.0.0 + org.apache.maven.errortest + testReportProjectDependenciesUnresolvable + 1 + + + + central + test://host/path + + + + + + not + found + 3.8.1 + + + + \ No newline at end of file diff --git a/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesUnresolvable/src/main/java/org/apache/maven/test/error/mojoFailure/App.java b/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesUnresolvable/src/main/java/org/apache/maven/test/error/mojoFailure/App.java new file mode 100644 index 0000000000..dd4102a31b --- /dev/null +++ b/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesUnresolvable/src/main/java/org/apache/maven/test/error/mojoFailure/App.java @@ -0,0 +1,13 @@ +package org.apache.maven.test.error.mojoFailure; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} diff --git a/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesUnresolvable/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java b/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesUnresolvable/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java new file mode 100644 index 0000000000..39ae671829 --- /dev/null +++ b/maven-embedder/src/test/error-reporting-projects/testReportProjectDependenciesUnresolvable/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java @@ -0,0 +1,38 @@ +package org.apache.maven.test.error.mojoFailure; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} diff --git a/maven-embedder/src/test/java/org/apache/maven/error/ErrorReporterPointcutTest.java b/maven-embedder/src/test/java/org/apache/maven/error/ErrorReporterPointcutTest.java index 339c1b9469..d6439dce56 100644 --- a/maven-embedder/src/test/java/org/apache/maven/error/ErrorReporterPointcutTest.java +++ b/maven-embedder/src/test/java/org/apache/maven/error/ErrorReporterPointcutTest.java @@ -5,6 +5,7 @@ import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException; import org.apache.maven.embedder.Configuration; import org.apache.maven.embedder.DefaultConfiguration; import org.apache.maven.embedder.MavenEmbedder; @@ -216,31 +217,35 @@ private void reportExceptions( MavenExecutionResult result, File basedir ) fail( writer.toString() ); } - // FIXME: Figure out how to keep the project-build error report from being the primary report... public void testReportErrorResolvingExtensionDirectDependencies() throws URISyntaxException, IOException { -// File projectDir = prepareProjectDir(); -// File localRepo = new File( projectDir, "local-repo" ); -// File project = new File( projectDir, "project" ); -// -// reporter.reportErrorResolvingExtensionDirectDependencies( null, null, null, null, null ); -// reporterCtl.setMatcher( MockControl.ALWAYS_MATCHER ); -// reporterCtl.setVoidCallable(); -// -// reporterCtl.replay(); -// -// MavenExecutionRequest request = new DefaultMavenExecutionRequest().setBaseDirectory( project ) -// .setLocalRepositoryPath( localRepo ) -// .setShowErrors( true ) -// .setErrorReporter( reporter ) -// .setGoals( Arrays.asList( new String[] { -// "initialize" -// } ) ); -// -// maven.execute( request ); -// -// reporterCtl.verify(); + File projectDir = prepareProjectDir(); + File localRepo = new File( projectDir, "local-repo" ); + File project = new File( projectDir, "project" ); + + // TODO: Verify that the actual error reported is the one that identified the failing project as an extension POM. + reporter.reportBadDependencyVersion( null, null, null ); + reporterCtl.setMatcher( MockControl.ALWAYS_MATCHER ); + reporterCtl.setVoidCallable(); + + reporter.reportErrorResolvingExtensionDirectDependencies( null, null, null, null, null ); + reporterCtl.setMatcher( MockControl.ALWAYS_MATCHER ); + reporterCtl.setVoidCallable(); + + reporterCtl.replay(); + + MavenExecutionRequest request = new DefaultMavenExecutionRequest().setBaseDirectory( project ) + .setLocalRepositoryPath( localRepo ) + .setShowErrors( true ) + .setErrorReporter( reporter ) + .setGoals( Arrays.asList( new String[] { + "initialize" + } ) ); + + maven.execute( request ); + + reporterCtl.verify(); } public void testReportAggregatedMojoFailureException() @@ -613,27 +618,49 @@ public void testReportProjectCycle() } public void testReportProjectDependenciesNotFound() + throws URISyntaxException, IOException { - // TODO Auto-generated method stub + File projectDir = prepareProjectDir(); + reporter.reportProjectDependenciesNotFound( null, null, (MultipleArtifactsNotFoundException) null ); + reporterCtl.setMatcher( MockControl.ALWAYS_MATCHER ); + reporterCtl.setVoidCallable(); + + reporterCtl.replay(); + + MavenExecutionRequest request = new DefaultMavenExecutionRequest().setBaseDirectory( projectDir ) + .setShowErrors( true ) + .setErrorReporter( reporter ) + .setGoals( Arrays.asList( new String[] { + "compile" + } ) ); + + maven.execute( request ); + + reporterCtl.verify(); } public void testReportProjectDependenciesUnresolvable() + throws URISyntaxException, IOException { - // TODO Auto-generated method stub + File projectDir = prepareProjectDir(); - } + reporter.reportProjectDependenciesUnresolvable( null, null, null ); + reporterCtl.setMatcher( MockControl.ALWAYS_MATCHER ); + reporterCtl.setVoidCallable(); - public void testReportProjectDependencyArtifactNotFound() - { - // TODO Auto-generated method stub + reporterCtl.replay(); - } + MavenExecutionRequest request = new DefaultMavenExecutionRequest().setBaseDirectory( projectDir ) + .setShowErrors( true ) + .setErrorReporter( reporter ) + .setGoals( Arrays.asList( new String[] { + "compile" + } ) ); - public void testReportProjectDependencyArtifactUnresolvable() - { - // TODO Auto-generated method stub + maven.execute( request ); + reporterCtl.verify(); } public void testReportProjectMojoFailureException()