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>