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}.


Reply via email to