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>