Author: bentmann
Date: Mon Aug 3 10:54:22 2009
New Revision: 800294
URL: http://svn.apache.org/viewvc?rev=800294&view=rev
Log:
[MNG-3043] Allow 'mvn test' to work with test-jar dependencies in a reactor
o Revised to consider reactor state
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=800294&r1=800293&r2=800294&view=diff
==============================================================================
---
maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
(original)
+++
maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
Mon Aug 3 10:54:22 2009
@@ -165,7 +165,7 @@
// User Local Repository
try
{
- delegatingLocalArtifactRepository.setBuildReactor( new
ReactorArtifactRepository( getProjectMap( session.getProjects() ) ) );
+ delegatingLocalArtifactRepository.setBuildReactor( new
ReactorArtifactRepository( getProjectMap( session.getProjects() ), session ) );
}
catch ( MavenExecutionException e )
{
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java?rev=800294&r1=800293&r2=800294&view=diff
==============================================================================
---
maven/components/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java
(original)
+++
maven/components/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java
Mon Aug 3 10:54:22 2009
@@ -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 @@
{
private Map<String, MavenProject> reactorProjects;
+ private MavenExecutionResult executionResult;
+
private final int hashCode;
- public ReactorArtifactRepository( Map<String, MavenProject>
reactorProjects )
+ public ReactorArtifactRepository( Map<String, MavenProject>
reactorProjects, MavenSession session )
{
this.reactorProjects = reactorProjects;
+ this.executionResult = ( session != null ) ? session.getResult() :
null;
hashCode = ( reactorProjects != null ) ?
reactorProjects.keySet().hashCode() : 0;
}
@@ -60,28 +66,26 @@
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 );
+ }
+ }
}
}
@@ -181,6 +185,18 @@
}
/**
+ * 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.
*
* @param artifact The artifact to check, must not be {...@code null}.