diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java index 6e4da98132..1530a484b3 100644 --- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java +++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java @@ -165,7 +165,7 @@ public MavenExecutionResult execute( MavenExecutionRequest request ) // User Local Repository try { - delegatingLocalArtifactRepository.setBuildReactor( new ReactorArtifactRepository( getProjectMap( session.getProjects() ) ) ); + delegatingLocalArtifactRepository.setBuildReactor( new ReactorArtifactRepository( getProjectMap( session.getProjects() ), session ) ); } catch ( MavenExecutionException e ) { diff --git a/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java b/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java index 1d3a1b01b2..94b6282898 100644 --- a/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java +++ b/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java @@ -6,6 +6,9 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.ArtifactUtils; +import org.apache.maven.execution.BuildSuccess; +import org.apache.maven.execution.MavenExecutionResult; +import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; import org.apache.maven.repository.LocalArtifactRepository; @@ -21,11 +24,14 @@ public class ReactorArtifactRepository { private Map reactorProjects; + private MavenExecutionResult executionResult; + private final int hashCode; - public ReactorArtifactRepository( Map reactorProjects ) + public ReactorArtifactRepository( Map reactorProjects, MavenSession session ) { this.reactorProjects = reactorProjects; + this.executionResult = ( session != null ) ? session.getResult() : null; hashCode = ( reactorProjects != null ) ? reactorProjects.keySet().hashCode() : 0; } @@ -60,28 +66,26 @@ public Artifact find( Artifact artifact ) artifact.setResolved( true ); } -// TODO: The code below supports MNG-3043 & MNG-2871 but in its current form causes MNG-4269. -// We need to consider the state of the reactor before handing out directories. -// else -// { -// File classesDir; -// -// if ( isTestArtifact( artifact ) ) -// { -// classesDir = new File( project.getBuild().getTestOutputDirectory() ); -// } -// else -// { -// classesDir = new File( project.getBuild().getOutputDirectory() ); -// } -// -// if ( classesDir.isDirectory() ) -// { -// artifact.setFile( classesDir ); -// -// artifact.setResolved( true ); -// } -// } + else if ( isProjectOutputValid( project ) ) + { + File classesDir; + + if ( isTestArtifact( artifact ) ) + { + classesDir = new File( project.getBuild().getTestOutputDirectory() ); + } + else + { + classesDir = new File( project.getBuild().getOutputDirectory() ); + } + + if ( classesDir.isDirectory() ) + { + artifact.setFile( classesDir ); + + artifact.setResolved( true ); + } + } } } @@ -180,6 +184,18 @@ private String getRepositoryConflictId( Artifact artifact ) return buffer.toString(); } + /** + * Determines whether the output directories of the specified project have valid contents and can be used for + * artifact resolution. + * + * @param project The project to check, must not be {@code null}. + * @return {@code true} if the output directories are valid, {@code false} otherwise. + */ + private boolean isProjectOutputValid( MavenProject project ) + { + return executionResult != null && executionResult.getBuildSummary( project ) instanceof BuildSuccess; + } + /** * Determines whether the specified artifact refers to test classes. *