You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/03/27 01:47:53 UTC

svn commit: r641662 - in /maven/components/trunk/maven-project/src: main/java/org/apache/maven/project/ test/java/org/apache/maven/project/ test/java/org/apache/maven/project/imports/t01/ test/resources/imports-repo/t01/p0/p2/ test/resources/imports-re...

Author: jdcasey
Date: Wed Mar 26 17:47:51 2008
New Revision: 641662

URL: http://svn.apache.org/viewvc?rev=641662&view=rev
Log:
[MNG-3482][MNG-3391]

1. Moving the mergeManagedDependencies(..) call INSIDE of processProjectLogic(..), to just AFTER interpolation but BEFORE injection of managed-dependency information into the main dependencies information, and also ahead of model validation. This allows expressions in imported-POM specifications to be interpolated before these are merged to the current project.

2. Restricting the mergeManagedDependencies(..) logic to only happen when type == pom (which was already there) AND scope == import (which is new). 

ALSO related to [MNG-3483].

Modified:
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/imports/t01/ProjectImportsTest.java
    maven/components/trunk/maven-project/src/test/resources/imports-repo/t01/p0/p2/pom.xml
    maven/components/trunk/maven-project/src/test/resources/imports-repo/t01/p0/p4/pom.xml

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=641662&r1=641661&r2=641662&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Wed Mar 26 17:47:51 2008
@@ -286,7 +286,7 @@
 
         try
         {
-            processProjectLogic( project, null, true );
+            processProjectLogic( project, null, null, null, true, false );
 
             project.setRemoteArtifactRepositories( mavenTools.buildArtifactRepositories( superModel.getRepositories() ) );
             project.setPluginArtifactRepositories( mavenTools.buildArtifactRepositories( superModel.getRepositories() ) );
@@ -778,13 +778,9 @@
         // merge any duplicated plugin definitions together, using the first appearance as the dominant one.
         ModelUtils.mergeDuplicatePluginDefinitions( project.getModel().getBuild() );
 
-        // TODO: [jdcasey] This line appears to be part of the problem for MNG-3391...
-        // the same line is in 2.0.x, so this is related to caching changes too...need to figure out how the two interact.
-        mergeManagedDependencies(project.getModel(), localRepository, repositories);
-
         try
         {
-            project = processProjectLogic( project, projectDescriptor, strict );
+            project = processProjectLogic( project, projectDescriptor, localRepository, repositories, strict, false );
         }
         catch ( ModelInterpolationException e )
         {
@@ -930,7 +926,10 @@
      */
     private MavenProject processProjectLogic( MavenProject project,
                                               File pomFile,
-                                              boolean strict )
+                                              ArtifactRepository localRepository,
+                                              List remoteRepositories,
+                                              boolean strict,
+                                              boolean superPom )
         throws ProjectBuildingException, ModelInterpolationException, InvalidRepositoryException
     {
         Model model = project.getModel();
@@ -970,6 +969,14 @@
         context.putAll( System.getProperties() );
         model = modelInterpolator.interpolate( model, context, strict );
 
+        // We must inject any imported dependencyManagement information ahead of the defaults injection.
+        if ( !superPom )
+        {
+            // TODO: [jdcasey] This line appears to be part of the problem for MNG-3391...
+            // the same line is in 2.0.x, so this is related to caching changes too...need to figure out how the two interact.
+            mergeManagedDependencies( model, localRepository, remoteRepositories );
+        }
+
         // interpolation is before injection, because interpolation is off-limits in the injected variables
         modelDefaultsInjector.injectDefaults( model );
 
@@ -1162,8 +1169,8 @@
                 Dependency dep = (Dependency) iter.next();
                 depsMap.put( dep.getManagementKey(), dep );
 
-                // FIXME: Add scope-check for 'import'
-                if (dep.getType().equals("pom"))
+                // MNG-3391: SEE BELOW.
+                if (dep.getType().equals("pom") && Artifact.SCOPE_IMPORT.equals( dep.getScope() ) )
                 {
                     doInclude = true;
                 }
@@ -1176,8 +1183,15 @@
                 {
                     Dependency dep = (Dependency)iter.next();
 
-                    // FIXME: Add scope-check for 'import'
-                    if (dep.getType().equals("pom"))
+                    // MNG-3391: The check for scope == 'import' to limit the StackOverflowExceptions caused
+                    // when importing from the parent and the import-target is a module that declares the
+                    // current pom as a parent.
+                    //
+                    // Also, dependencies with type == 'pom' are the best way we currently have to
+                    // aggregate multiple other dependencies without messing with the issues caused by using
+                    // an assembly (ClassCastException if a second-level dep is also part of the maven core,
+                    // for instance)
+                    if (dep.getType().equals("pom") && Artifact.SCOPE_IMPORT.equals( dep.getScope() ) )
                     {
                         Artifact artifact = artifactFactory.createProjectArtifact( dep.getGroupId(), dep.getArtifactId(),
                                                                                   dep.getVersion(), dep.getScope() );

Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java?rev=641662&r1=641661&r2=641662&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java (original)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java Wed Mar 26 17:47:51 2008
@@ -25,6 +25,7 @@
 import org.apache.maven.profiles.DefaultProfileManager;
 import org.apache.maven.profiles.activation.DefaultProfileActivationContext;
 import org.apache.maven.profiles.activation.ProfileActivationContext;
+import org.apache.maven.project.validation.ModelValidationResult;
 import org.codehaus.plexus.PlexusTestCase;
 
 import java.io.File;
@@ -111,7 +112,22 @@
     protected MavenProject getProjectWithDependencies( File pom )
         throws Exception
     {
-        return projectBuilder.buildWithDependencies( pom, getLocalRepository(), null );
+        try
+        {
+            return projectBuilder.buildWithDependencies( pom, getLocalRepository(), null );
+        }
+        catch ( Exception e )
+        {
+            if ( e instanceof InvalidProjectModelException )
+            {
+                ModelValidationResult validationResult = ((InvalidProjectModelException)e).getValidationResult();
+                String message = "In: " + pom + "(" + ((ProjectBuildingException) e).getProjectId() + ")\n\n" + validationResult.render( "  " );
+                System.out.println( message );
+                fail( message );
+            }
+
+            throw e;
+        }
     }
 
     protected MavenProject getProject( File pom )

Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/imports/t01/ProjectImportsTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/imports/t01/ProjectImportsTest.java?rev=641662&r1=641661&r2=641662&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/imports/t01/ProjectImportsTest.java (original)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/imports/t01/ProjectImportsTest.java Wed Mar 26 17:47:51 2008
@@ -19,12 +19,12 @@
  * under the License.
  */
 
-import java.io.File;
-import java.util.Map;
-
+import org.apache.maven.artifact.Artifact;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.imports.AbstractProjectImportsTestCase;
-import org.apache.maven.artifact.Artifact;
+
+import java.io.File;
+import java.util.Map;
 
 
 /**

Modified: maven/components/trunk/maven-project/src/test/resources/imports-repo/t01/p0/p2/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/imports-repo/t01/p0/p2/pom.xml?rev=641662&r1=641661&r2=641662&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/imports-repo/t01/p0/p2/pom.xml (original)
+++ maven/components/trunk/maven-project/src/test/resources/imports-repo/t01/p0/p2/pom.xml Wed Mar 26 17:47:51 2008
@@ -20,6 +20,7 @@
         <artifactId>p1</artifactId>
         <version>1.0</version>
         <type>pom</type>
+        <scope>import</scope>
       </dependency>
       <dependency>
         <groupId>maven-test</groupId>

Modified: maven/components/trunk/maven-project/src/test/resources/imports-repo/t01/p0/p4/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/imports-repo/t01/p0/p4/pom.xml?rev=641662&r1=641661&r2=641662&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/imports-repo/t01/p0/p4/pom.xml (original)
+++ maven/components/trunk/maven-project/src/test/resources/imports-repo/t01/p0/p4/pom.xml Wed Mar 26 17:47:51 2008
@@ -20,12 +20,14 @@
         <artifactId>p2</artifactId>
         <version>1.0</version>
         <type>pom</type>
+        <scope>import</scope>
       </dependency>
       <dependency>
         <groupId>maven</groupId>
         <artifactId>p3</artifactId>
         <version>1.0</version>
         <type>pom</type>
+        <scope>import</scope>
       </dependency>
       <dependency>
         <groupId>maven-test</groupId>