Author: bimargulies
Date: Fri Dec  9 18:30:26 2011
New Revision: 1212564

URL: http://svn.apache.org/viewvc?rev=1212564&view=rev
Log:
MNG-5214: Dependency resolution substitutes g:a:v:jar for j:a:v:something-else 
when something-else isn't in the reacto

o When Aether asks the ReactorReader for a file for an artifact, remember to 
match type and classifier. And if all else
  fails, do not return target/classes if the desired artifact is not of type 
'jar'. Arguably, if type or classifier
  are non-default, then we should never return those default paths at all.
o Add 'dir' format to make it quicker to run a quick test. If everyone hates 
this I'll revert it.

Modified:
    maven/maven-3/trunk/apache-maven/src/main/assembly/bin.xml
    
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorReader.java

Modified: maven/maven-3/trunk/apache-maven/src/main/assembly/bin.xml
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/apache-maven/src/main/assembly/bin.xml?rev=1212564&r1=1212563&r2=1212564&view=diff
==============================================================================
--- maven/maven-3/trunk/apache-maven/src/main/assembly/bin.xml (original)
+++ maven/maven-3/trunk/apache-maven/src/main/assembly/bin.xml Fri Dec  9 
18:30:26 2011
@@ -20,6 +20,7 @@ under the License.
 <assembly>
   <id>bin</id>
   <formats>
+    <format>dir</format>
     <format>zip</format>
     <format>tar.gz</format>
   </formats>

Modified: 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorReader.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorReader.java?rev=1212564&r1=1212563&r2=1212564&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorReader.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorReader.java
 Fri Dec  9 18:30:26 2011
@@ -85,9 +85,10 @@ class ReactorReader
         {
             return projectArtifact.getFile();
         }
-        else if ( !hasBeenPackaged( project ) )
+        else if ( !hasBeenPackaged( project ) ) 
         {
             // fallback to loose class files only if artifacts haven't been 
packaged yet
+            // and only for plain old jars. Not war files, not ear files, not 
anything else.
 
             if ( isTestArtifact( artifact ) )
             {
@@ -98,7 +99,7 @@ class ReactorReader
             }
             else
             {
-                if ( project.hasLifecyclePhase( "compile" ) )
+                if ( project.hasLifecyclePhase( "compile" ) && 
artifact.getProperty( "type", "").equals( "jar" ) ) /* also reject non-"" 
classifier? */
                 {
                     return new File( project.getBuild().getOutputDirectory() );
                 }
@@ -143,7 +144,9 @@ class ReactorReader
         {
             for ( org.apache.maven.artifact.Artifact attachedArtifact : 
attachedArtifacts )
             {
-                if ( requestedRepositoryConflictId.equals( getConflictId( 
attachedArtifact ) ) )
+                if ( requestedArtifact.getProperty ( "type", "" ).equals( 
attachedArtifact.getType() )
+                     && classifierComparison ( 
requestedArtifact.getClassifier(), attachedArtifact.getClassifier() )           
                     
+                     && requestedRepositoryConflictId.equals( getConflictId( 
attachedArtifact ) ) )
                 {
                     return attachedArtifact;
                 }
@@ -152,6 +155,12 @@ class ReactorReader
 
         return null;
     }
+    
+    private boolean classifierComparison ( String c1, String c2 )
+    {
+        return c1 == null && c2 == null
+                        || ((c1 != null) && c1.equals(c2));
+    }
 
     /**
      * Gets the repository conflict id of the specified artifact. Unlike the 
dependency conflict id, the repository


Reply via email to