Index: maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java =================================================================== --- maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java (revision 463259) +++ maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java (working copy) @@ -69,6 +69,7 @@ ArtifactResolutionResult result = artifactResolver.resolveTransitively( Collections.singleton( artifact ), project.getArtifact(), + project.getManagedVersionMap(), localRepository, project.getRemoteArtifactRepositories(), artifactMetadataSource, Index: maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java =================================================================== --- maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (revision 463259) +++ maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (working copy) @@ -611,6 +611,7 @@ dependencies.addAll( pluginDescriptor.getIntroducedDependencyArtifacts() ); ArtifactResolutionResult result = artifactResolver.resolveTransitively( dependencies, pluginArtifact, + project.getManagedVersionMap(), localRepository, resolutionGroup.getResolutionRepositories(), artifactMetadataSource, @@ -1135,7 +1136,9 @@ project.setDependencyArtifacts( project.createArtifacts( artifactFactory, null, null ) ); } ArtifactResolutionResult result = artifactResolver.resolveTransitively( project.getDependencyArtifacts(), - artifact, context.getLocalRepository(), + artifact, + project.getManagedVersionMap(), + context.getLocalRepository(), project.getRemoteArtifactRepositories(), artifactMetadataSource, filter ); Index: maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java =================================================================== --- maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java (revision 463259) +++ maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java (working copy) @@ -28,6 +28,7 @@ import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.artifact.versioning.ManagedVersionMap; import org.codehaus.plexus.PlexusTestCase; import java.util.ArrayList; @@ -382,6 +383,22 @@ assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, modifiedB} ), res.getArtifacts() ); } + // This should behave exactly the same as the previous test because the managed dependency is in the same project. + public void testResolveManagedVersionWithOverride() + throws ArtifactResolutionException, InvalidVersionSpecificationException + { + ArtifactSpec a = createArtifact( "a", "1.0" ); + a.addDependency( "b", "3.0", Artifact.SCOPE_RUNTIME ); + + Artifact managedVersion = createArtifact( "b", "5.0" ).artifact; + ManagedVersionMap map = new ManagedVersionMap(true); + map.put(managedVersion.getDependencyConflictId(), managedVersion); + Artifact modifiedB = createArtifact( "b", "5.0", Artifact.SCOPE_RUNTIME ).artifact; + + ArtifactResolutionResult res = collect( a, map ); + assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, modifiedB} ), res.getArtifacts() ); + } + public void testResolveCompileScopeOverTestScope() throws ArtifactResolutionException, InvalidVersionSpecificationException { @@ -695,6 +712,13 @@ managedVersions, null, null, source, null, Collections.EMPTY_LIST ); } + private ArtifactResolutionResult collect( ArtifactSpec a, ManagedVersionMap managedVersions) + throws ArtifactResolutionException + { + return artifactCollector.collect( Collections.singleton( a.artifact ), projectArtifact.artifact, + managedVersions, null, null, source, null, Collections.EMPTY_LIST ); + } + private ArtifactSpec createArtifact( String id, String version ) throws InvalidVersionSpecificationException { Index: maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ManagedVersionMap.java =================================================================== --- maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ManagedVersionMap.java (revision 0) +++ maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ManagedVersionMap.java (revision 0) @@ -0,0 +1,74 @@ +package org.apache.maven.artifact.versioning; +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.util.HashMap; +import java.util.Map; +import java.util.Iterator; + +public class ManagedVersionMap extends HashMap +{ + private final boolean override; + + public ManagedVersionMap(boolean override) + { + super(); + this.override = override; + } + + public ManagedVersionMap(Map map, boolean override) + { + super(); + if (map != null) + { + putAll(map); + if (map instanceof ManagedVersionMap) + { + this.override = override || ((ManagedVersionMap)map).isOverrides(); + + } + else + { + this.override = override; + } + } + else + { + this.override = override; + } + } + + public boolean isOverrides() + { + return this.override; + } + + public String toString() + { + StringBuffer buffer = new StringBuffer("ManagedVersionMap\n"); + Iterator iter = this.keySet().iterator(); + while (iter.hasNext()) + { + String key = (String)iter.next(); + buffer.append(key).append("=").append(get(key)); + if (iter.hasNext()) + { + buffer.append("\n"); + } + } + return buffer.toString(); + } +} Index: maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java =================================================================== --- maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java (revision 463259) +++ maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java (working copy) @@ -25,6 +25,7 @@ import org.apache.maven.artifact.versioning.ArtifactVersion; import org.apache.maven.artifact.versioning.OverConstrainedVersionException; import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.artifact.versioning.ManagedVersionMap; import java.util.ArrayList; import java.util.Collections; @@ -64,7 +65,10 @@ root.addDependencies( artifacts, remoteRepositories, filter ); - recurse( root, resolvedArtifacts, managedVersions, localRepository, remoteRepositories, source, filter, + ManagedVersionMap versionMap = (managedVersions != null && managedVersions instanceof ManagedVersionMap) ? + (ManagedVersionMap)managedVersions : new ManagedVersionMap(managedVersions, false); + + recurse( root, resolvedArtifacts, versionMap, localRepository, remoteRepositories, source, filter, listeners ); Set set = new HashSet(); @@ -99,7 +103,7 @@ return result; } - private void recurse( ResolutionNode node, Map resolvedArtifacts, Map managedVersions, + private void recurse( ResolutionNode node, Map resolvedArtifacts, ManagedVersionMap managedVersions, ArtifactRepository localRepository, List remoteRepositories, ArtifactMetadataSource source, ArtifactFilter filter, List listeners ) throws CyclicDependencyException, ArtifactResolutionException, OverConstrainedVersionException @@ -108,6 +112,7 @@ // TODO: use as a conflict resolver Object key = node.getKey(); + boolean defaultVersion = false; if ( managedVersions.containsKey( key ) ) { Artifact artifact = (Artifact) managedVersions.get( key ); @@ -117,8 +122,9 @@ if ( artifact.getVersion() != null ) { node.getArtifact().setVersion( artifact.getVersion() ); + defaultVersion = true; } - if ( artifact.getScope() != null ) + if ( !managedVersions.isOverrides() && artifact.getScope() != null ) { node.getArtifact().setScope( artifact.getScope() ); } @@ -127,8 +133,9 @@ List previousNodes = (List) resolvedArtifacts.get( key ); if ( previousNodes != null ) { - for ( Iterator i = previousNodes.iterator(); i.hasNext(); ) - { + boolean useDefault = defaultVersion && managedVersions.isOverrides(); + for ( Iterator i = previousNodes.iterator(); !useDefault && i.hasNext(); ) + { ResolutionNode previous = (ResolutionNode) i.next(); if ( previous.isActive() ) Index: maven-model/maven.mdo =================================================================== --- maven-model/maven.mdo (revision 463259) +++ maven-model/maven.mdo (working copy) @@ -586,6 +586,7 @@ dependencyManagement 4.0.0 + false false + override + + When set to true the versions specified here will override the versions specified in + the dependencies themselves. + + boolean + + dependencies 4.0.0 Index: maven-project/src/test/java/org/apache/maven/project/inheritance/t04/ProjectInheritanceTest.java =================================================================== --- maven-project/src/test/java/org/apache/maven/project/inheritance/t04/ProjectInheritanceTest.java (revision 0) +++ maven-project/src/test/java/org/apache/maven/project/inheritance/t04/ProjectInheritanceTest.java (revision 0) @@ -0,0 +1,82 @@ +package org.apache.maven.project.inheritance.t04; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.File; +import java.util.List; +import java.util.Set; +import java.util.Iterator; + +import org.apache.maven.model.Build; +import org.apache.maven.model.MailingList; +import org.apache.maven.model.Plugin; +import org.apache.maven.model.PluginExecution; +import org.apache.maven.model.Dependency; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase; +import org.apache.maven.artifact.Artifact; +import org.codehaus.plexus.util.xml.Xpp3Dom; + +/** + * A test which demonstrates maven's dependency management + * + * @author Jason van Zyl + * @version $Id: ProjectInheritanceTest.java 391202 2006-04-04 00:40:13Z jdcasey $ + */ +public class ProjectInheritanceTest + extends AbstractProjectInheritanceTestCase +{ + // ---------------------------------------------------------------------- + // + // p1 inherits from p0 + // p0 inhertis from super model + // + // or we can show it graphically as: + // + // p1 ---> p0 --> super model + // + // ---------------------------------------------------------------------- + + public void testDependencyManagement() + throws Exception + { + File localRepo = getLocalRepositoryPath(); + File pom0 = new File( localRepo, "p0/pom.xml" ); + + File pom0Basedir = pom0.getParentFile(); + + File pom1 = new File( pom0Basedir, "p1/pom.xml" ); + + // load everything... + MavenProject project0 = getProjectWithDependencies( pom0 ); + MavenProject project1 = getProjectWithDependencies( pom1 ); + + assertEquals( pom0Basedir, project1.getParent().getBasedir() ); + Set set = project1.getArtifacts(); + assertNotNull("No artifacts", set); + assertTrue("No Artifacts", set.size() > 0); + Iterator iter = set.iterator(); + + while (iter.hasNext()) + { + Artifact artifact = (Artifact)iter.next(); + System.out.println("Artifact: " + artifact.getDependencyConflictId() + " " + artifact.getVersion()); + assertTrue("Incorrect version for " + artifact.getDependencyConflictId(), artifact.getVersion().equals("1.0")); + } + + } +} Index: maven-project/src/test/java/org/apache/maven/project/inheritance/t05/ProjectInheritanceTest.java =================================================================== --- maven-project/src/test/java/org/apache/maven/project/inheritance/t05/ProjectInheritanceTest.java (revision 0) +++ maven-project/src/test/java/org/apache/maven/project/inheritance/t05/ProjectInheritanceTest.java (revision 0) @@ -0,0 +1,82 @@ +package org.apache.maven.project.inheritance.t05; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.File; +import java.util.List; +import java.util.Set; +import java.util.Iterator; + +import org.apache.maven.model.Build; +import org.apache.maven.model.MailingList; +import org.apache.maven.model.Plugin; +import org.apache.maven.model.PluginExecution; +import org.apache.maven.model.Dependency; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase; +import org.apache.maven.artifact.Artifact; +import org.codehaus.plexus.util.xml.Xpp3Dom; + +/** + * A test which demonstrates maven's dependency management + * + * @author Jason van Zyl + * @version $Id: ProjectInheritanceTest.java 391202 2006-04-04 00:40:13Z jdcasey $ + */ +public class ProjectInheritanceTest + extends AbstractProjectInheritanceTestCase +{ + // ---------------------------------------------------------------------- + // + // p1 inherits from p0 + // p0 inhertis from super model + // + // or we can show it graphically as: + // + // p1 ---> p0 --> super model + // + // ---------------------------------------------------------------------- + + public void testDependencyManagement() + throws Exception + { + File localRepo = getLocalRepositoryPath(); + File pom0 = new File( localRepo, "p0/pom.xml" ); + + File pom0Basedir = pom0.getParentFile(); + + File pom1 = new File( pom0Basedir, "p1/pom.xml" ); + + // load everything... + MavenProject project0 = getProjectWithDependencies( pom0 ); + MavenProject project1 = getProjectWithDependencies( pom1 ); + + assertEquals( pom0Basedir, project1.getParent().getBasedir() ); + Set set = project1.getArtifacts(); + assertNotNull("No artifacts", set); + assertTrue("No Artifacts", set.size() > 0); + Iterator iter = set.iterator(); + + while (iter.hasNext()) + { + Artifact artifact = (Artifact)iter.next(); + System.out.println("Artifact: " + artifact.getDependencyConflictId() + " " + artifact.getVersion()); + assertTrue("Incorrect version for " + artifact.getDependencyConflictId(), artifact.getVersion().equals("1.0")); + } + + } +} Index: maven-project/src/test/java/org/apache/maven/project/inheritance/t06/ProjectInheritanceTest.java =================================================================== --- maven-project/src/test/java/org/apache/maven/project/inheritance/t06/ProjectInheritanceTest.java (revision 0) +++ maven-project/src/test/java/org/apache/maven/project/inheritance/t06/ProjectInheritanceTest.java (revision 0) @@ -0,0 +1,87 @@ +package org.apache.maven.project.inheritance.t06; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.File; +import java.util.List; +import java.util.Set; +import java.util.Iterator; + +import org.apache.maven.model.Build; +import org.apache.maven.model.MailingList; +import org.apache.maven.model.Plugin; +import org.apache.maven.model.PluginExecution; +import org.apache.maven.model.Dependency; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase; +import org.apache.maven.artifact.Artifact; +import org.codehaus.plexus.util.xml.Xpp3Dom; +import org.codehaus.plexus.logging.LoggerManager; +import org.codehaus.plexus.logging.Logger; + +/** + * A test which demonstrates maven's dependency management + * + * @author Jason van Zyl + * @version $Id: ProjectInheritanceTest.java 391202 2006-04-04 00:40:13Z jdcasey $ + */ +public class ProjectInheritanceTest + extends AbstractProjectInheritanceTestCase +{ + // ---------------------------------------------------------------------- + // + // p1 inherits from p0 + // p0 inhertis from super model + // + // or we can show it graphically as: + // + // p1 ---> p0 --> super model + // + // ---------------------------------------------------------------------- + + public void testDependencyManagement() + throws Exception + { + File localRepo = getLocalRepositoryPath(); + File pom0 = new File( localRepo, "p0/pom.xml" ); + + File pom0Basedir = pom0.getParentFile(); + + File pom1 = new File( pom0Basedir, "p1/pom.xml" ); + + // load everything... + MavenProject project0 = getProjectWithDependencies( pom0 ); + MavenProject project1 = getProjectWithDependencies( pom1 ); + + assertEquals( pom0Basedir, project1.getParent().getBasedir() ); + System.out.println("Project " + project1.getId() + " " + project1); + Set set = project1.getArtifacts(); + assertNotNull("No artifacts", set); + assertTrue("No Artifacts", set.size() > 0); + Iterator iter = set.iterator(); + assertTrue("Set size should be 4, is " + set.size(), set.size() == 4); + + while (iter.hasNext()) + { + Artifact artifact = (Artifact)iter.next(); + System.out.println("Artifact: " + artifact.getDependencyConflictId() + " " + artifact.getVersion() + + " Optional=" + (artifact.isOptional() ? "true" : "false")); + assertTrue("Incorrect version for " + artifact.getDependencyConflictId(), artifact.getVersion().equals("1.0")); + } + + } +} Index: maven-project/src/test/java/org/apache/maven/project/inheritance/t07/ProjectInheritanceTest.java =================================================================== --- maven-project/src/test/java/org/apache/maven/project/inheritance/t07/ProjectInheritanceTest.java (revision 0) +++ maven-project/src/test/java/org/apache/maven/project/inheritance/t07/ProjectInheritanceTest.java (revision 0) @@ -0,0 +1,88 @@ +package org.apache.maven.project.inheritance.t07; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.File; +import java.util.List; +import java.util.Set; +import java.util.Iterator; + +import org.apache.maven.model.Build; +import org.apache.maven.model.MailingList; +import org.apache.maven.model.Plugin; +import org.apache.maven.model.PluginExecution; +import org.apache.maven.model.Dependency; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase; +import org.apache.maven.artifact.Artifact; +import org.codehaus.plexus.util.xml.Xpp3Dom; +import org.codehaus.plexus.logging.LoggerManager; +import org.codehaus.plexus.logging.Logger; + +/** + * A test which demonstrates maven's dependency management + * + * @author Jason van Zyl + * @version $Id: ProjectInheritanceTest.java 391202 2006-04-04 00:40:13Z jdcasey $ + */ +public class ProjectInheritanceTest + extends AbstractProjectInheritanceTestCase +{ + // ---------------------------------------------------------------------- + // + // p1 inherits from p0 + // p0 inhertis from super model + // + // or we can show it graphically as: + // + // p1 ---> p0 --> super model + // + // ---------------------------------------------------------------------- + + public void testDependencyManagement() + throws Exception + { + File localRepo = getLocalRepositoryPath(); + File pom0 = new File( localRepo, "p0/pom.xml" ); + + File pom0Basedir = pom0.getParentFile(); + + File pom1 = new File( pom0Basedir, "p1/pom.xml" ); + + // load everything... + MavenProject project0 = getProjectWithDependencies( pom0 ); + MavenProject project1 = getProjectWithDependencies( pom1 ); + + assertEquals( pom0Basedir, project1.getParent().getBasedir() ); + System.out.println("Project " + project1.getId() + " " + project1); + Set set = project1.getArtifacts(); + assertNotNull("No artifacts", set); + assertTrue("No Artifacts", set.size() > 0); + Iterator iter = set.iterator(); + assertTrue("Set size should be 3, is " + set.size(), set.size() == 3); + + while (iter.hasNext()) + { + Artifact artifact = (Artifact)iter.next(); + assertFalse("", artifact.getArtifactId().equals("maven-test-d")); + System.out.println("Artifact: " + artifact.getDependencyConflictId() + " " + artifact.getVersion() + + " Optional=" + (artifact.isOptional() ? "true" : "false")); + assertTrue("Incorrect version for " + artifact.getDependencyConflictId(), artifact.getVersion().equals("1.0")); + } + + } +} Index: maven-project/src/test/java/org/apache/maven/project/inheritance/t08/ProjectInheritanceTest.java =================================================================== --- maven-project/src/test/java/org/apache/maven/project/inheritance/t08/ProjectInheritanceTest.java (revision 0) +++ maven-project/src/test/java/org/apache/maven/project/inheritance/t08/ProjectInheritanceTest.java (revision 0) @@ -0,0 +1,87 @@ +package org.apache.maven.project.inheritance.t08; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.File; +import java.util.List; +import java.util.Set; +import java.util.Iterator; + +import org.apache.maven.model.Build; +import org.apache.maven.model.MailingList; +import org.apache.maven.model.Plugin; +import org.apache.maven.model.PluginExecution; +import org.apache.maven.model.Dependency; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase; +import org.apache.maven.artifact.Artifact; +import org.codehaus.plexus.util.xml.Xpp3Dom; +import org.codehaus.plexus.logging.LoggerManager; +import org.codehaus.plexus.logging.Logger; + +/** + * A test which demonstrates maven's dependency management + * + * @author Jason van Zyl + * @version $Id: ProjectInheritanceTest.java 391202 2006-04-04 00:40:13Z jdcasey $ + */ +public class ProjectInheritanceTest + extends AbstractProjectInheritanceTestCase +{ + // ---------------------------------------------------------------------- + // + // p1 inherits from p0 + // p0 inhertis from super model + // + // or we can show it graphically as: + // + // p1 ---> p0 --> super model + // + // ---------------------------------------------------------------------- + + public void testDependencyManagement() + throws Exception + { + File localRepo = getLocalRepositoryPath(); + File pom0 = new File( localRepo, "p0/pom.xml" ); + + File pom0Basedir = pom0.getParentFile(); + + File pom1 = new File( pom0Basedir, "p1/pom.xml" ); + + // load everything... + MavenProject project0 = getProjectWithDependencies( pom0 ); + MavenProject project1 = getProjectWithDependencies( pom1 ); + + assertEquals( pom0Basedir, project1.getParent().getBasedir() ); + System.out.println("Project " + project1.getId() + " " + project1); + Set set = project1.getArtifacts(); + assertNotNull("No artifacts", set); + assertTrue("No Artifacts", set.size() > 0); + Iterator iter = set.iterator(); + assertTrue("Set size should be 4, is " + set.size(), set.size() == 4); + + while (iter.hasNext()) + { + Artifact artifact = (Artifact)iter.next(); + System.out.println("Artifact: " + artifact.getDependencyConflictId() + " " + artifact.getVersion() + + " Optional=" + (artifact.isOptional() ? "true" : "false")); + assertTrue("Incorrect version for " + artifact.getDependencyConflictId(), artifact.getVersion().equals("1.0")); + } + + } +} Index: maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java =================================================================== --- maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java (revision 463259) +++ maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java (working copy) @@ -18,9 +18,15 @@ import java.io.File; import java.io.IOException; +import java.util.Map; +import java.util.Iterator; +import java.util.List; import org.apache.maven.model.Model; import org.apache.maven.model.Parent; +import org.apache.maven.model.DependencyManagement; +import org.apache.maven.model.Dependency; +import org.apache.maven.artifact.versioning.ManagedVersionMap; public class MavenProjectTest extends AbstractMavenProjectTestCase @@ -38,7 +44,7 @@ childModel.setArtifactId( "artifact" ); MavenProject childProject = new MavenProject( childModel ); - + File childFile = new File( System.getProperty( "java.io.tmpdir" ), "maven-project-tests" + System.currentTimeMillis() + "/child/pom.xml" ); childProject.setFile( childFile ); @@ -46,7 +52,7 @@ String adjustment = parentProject.getModulePathAdjustment( childProject ); assertNotNull( adjustment ); - + assertEquals( "..", adjustment ); } @@ -89,8 +95,35 @@ MavenProject clonedProject = new MavenProject( projectToClone ); assertEquals( "maven-core", clonedProject.getArtifactId() ); + Map clonedMap = clonedProject.getManagedVersionMap(); + assertNotNull("ManagedVersionMap not copied", clonedMap); + assertTrue("ManagedVersionMap is not empty", clonedMap.isEmpty()); } + public void testCopyConstructorWithDependencyManagement() + throws Exception + { + File f = getFileForClasspathResource( "dependencyManagement-pom.xml" ); + MavenProject projectToClone = getProjectWithDependencies( f ); + DependencyManagement dep = projectToClone.getDependencyManagement(); + assertNotNull("No dependencyManagement", dep); + List list = dep.getDependencies(); + assertNotNull("No dependencies", list); + assertTrue("Empty dependency list", !list.isEmpty()); + + Map map = projectToClone.getManagedVersionMap(); + assertNotNull("No ManagedVersionMap", map); + assertTrue("ManagedVersionMap is empty", !map.isEmpty()); + + MavenProject clonedProject = new MavenProject( projectToClone ); + assertEquals( "maven-core", clonedProject.getArtifactId() ); + Map clonedMap = clonedProject.getManagedVersionMap(); + assertNotNull("ManagedVersionMap not copied", clonedMap); + assertTrue("ManagedVersionMap is empty", !clonedMap.isEmpty()); + assertTrue("Not a ManagedVersionMap", clonedMap instanceof ManagedVersionMap); + assertTrue("ManagedVersionMap does not contain test key", clonedMap.containsKey("maven-test:maven-test-b:jar")); + } + public void testGetModulePathAdjustment() throws IOException { Index: maven-project/src/test/resources/dependencyManagement-pom.xml =================================================================== --- maven-project/src/test/resources/dependencyManagement-pom.xml (revision 0) +++ maven-project/src/test/resources/dependencyManagement-pom.xml (revision 0) @@ -0,0 +1,41 @@ + + + + 4.0.0 + maven + maven-core + Maven + 2.0-SNAPSHOT + + + + maven-test + maven-test-b + 1.0 + + + + + + + maven-plexus-plugin + 1.0 + + src/conf/plexus.conf + src/conf/plexus.properties + Continuum + + + + + plexus:runtime + + + ContinuumPro + + + + + + + Index: maven-project/src/test/resources/inheritance-repo/t04/p0/p1/pom.xml =================================================================== --- maven-project/src/test/resources/inheritance-repo/t04/p0/p1/pom.xml (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t04/p0/p1/pom.xml (revision 0) @@ -0,0 +1,51 @@ + + + p0 + maven + 1.0 + + 4.0.0 + maven + p1 + pom + p1 + 1.0 + + scm-url + + + + + maven-test + maven-test-b + 1.0 + + + + + + maven-test + maven-test-a + 2.0 + + + maven-test + maven-test-b + 1.1 + + + maven-test + maven-test-c + + + + + + maven-antrun-plugin + + ${project.parent.basedir} + + + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t04/p0/pom.xml =================================================================== --- maven-project/src/test/resources/inheritance-repo/t04/p0/pom.xml (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t04/p0/pom.xml (revision 0) @@ -0,0 +1,36 @@ + + 4.0.0 + maven + p0 + pom + p0 + 1.0 + + Codehaus + + + true + + + maven-test + maven-test-a + 1.0 + + + maven-test + maven-test-b + 2.0 + + + maven-test + maven-test-c + 1.0 + + + maven-test + maven-test-d + 1.0 + + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t05/p0/p1/pom.xml =================================================================== --- maven-project/src/test/resources/inheritance-repo/t05/p0/p1/pom.xml (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t05/p0/p1/pom.xml (revision 0) @@ -0,0 +1,52 @@ + + + p0 + maven + 1.0 + + 4.0.0 + maven + p1 + pom + p1 + 1.0 + + scm-url + + + + + maven-test + maven-test-b + 1.0 + + + maven-test + maven-test-d + 1.0 + + + --> + + + maven-test + maven-test-a + 1.0 + + + maven-test + maven-test-c + 1.0 + + + + + + maven-antrun-plugin + + ${project.parent.basedir} + + + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t05/p0/pom.xml =================================================================== --- maven-project/src/test/resources/inheritance-repo/t05/p0/pom.xml (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t05/p0/pom.xml (revision 0) @@ -0,0 +1,36 @@ + + 4.0.0 + maven + p0 + pom + p0 + 1.0 + + Codehaus + + + false + + + maven-test + maven-test-a + 1.0 + + + maven-test + maven-test-b + 1.1 + + + maven-test + maven-test-c + 1.0 + + + maven-test + maven-test-d + 1.2 + + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t06/p0/p1/pom.xml =================================================================== --- maven-project/src/test/resources/inheritance-repo/t06/p0/p1/pom.xml (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t06/p0/p1/pom.xml (revision 0) @@ -0,0 +1,54 @@ + + + p0 + maven + 1.0 + + 4.0.0 + maven + p1 + pom + p1 + 1.0 + + scm-url + + + + + maven-test + maven-test-b + 1.0 + + + maven-test + maven-test-d + 1.0 + test + false + + + --> + + + maven-test + maven-test-a + 1.0 + + + maven-test + maven-test-c + 1.0 + + + + + + maven-antrun-plugin + + ${project.parent.basedir} + + + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t06/p0/pom.xml =================================================================== --- maven-project/src/test/resources/inheritance-repo/t06/p0/pom.xml (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t06/p0/pom.xml (revision 0) @@ -0,0 +1,38 @@ + + 4.0.0 + maven + p0 + pom + p0 + 1.0 + + Codehaus + + + false + + + maven-test + maven-test-a + 1.0 + + + maven-test + maven-test-b + 1.1 + + + maven-test + maven-test-c + 1.0 + + + maven-test + maven-test-d + 1.2 + test + false + + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t06/maven-test/jars/maven-test-a-1.0.jar =================================================================== --- maven-project/src/test/resources/inheritance-repo/t06/maven-test/jars/maven-test-a-1.0.jar (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t06/maven-test/jars/maven-test-a-1.0.jar (revision 0) @@ -0,0 +1 @@ +foo Index: maven-project/src/test/resources/inheritance-repo/t06/maven-test/jars/maven-test-b-1.0.jar =================================================================== --- maven-project/src/test/resources/inheritance-repo/t06/maven-test/jars/maven-test-b-1.0.jar (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t06/maven-test/jars/maven-test-b-1.0.jar (revision 0) @@ -0,0 +1 @@ +foo Index: maven-project/src/test/resources/inheritance-repo/t06/maven-test/jars/maven-test-c-1.0.jar =================================================================== --- maven-project/src/test/resources/inheritance-repo/t06/maven-test/jars/maven-test-c-1.0.jar (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t06/maven-test/jars/maven-test-c-1.0.jar (revision 0) @@ -0,0 +1 @@ +foo Index: maven-project/src/test/resources/inheritance-repo/t06/maven-test/jars/maven-test-d-1.0.jar =================================================================== --- maven-project/src/test/resources/inheritance-repo/t06/maven-test/jars/maven-test-d-1.0.jar (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t06/maven-test/jars/maven-test-d-1.0.jar (revision 0) @@ -0,0 +1 @@ +foo Index: maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-a-1.0.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-a-1.0.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-a-1.0.pom (revision 0) @@ -0,0 +1,23 @@ + + 4.0.0 + maven-test + maven-test-a + jar + 1.0 + + + central + Fake Maven Central Repository + file://dummy + + + + + maven-test + maven-test-b + 1.0 + jar + compile + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-b-1.0.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-b-1.0.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-b-1.0.pom (revision 0) @@ -0,0 +1,24 @@ + + 4.0.0 + maven-test + maven-test-b + jar + 1.0 + + + maven-test + maven-test-c + 1.0 + jar + compile + + + maven-test + maven-test-d + 1.1 + jar + compile + false + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-c-1.0.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-c-1.0.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-c-1.0.pom (revision 0) @@ -0,0 +1,17 @@ + + 4.0.0 + maven-test + maven-test-c + jar + 1.0 + + + maven-test + maven-test-d + 1.1 + jar + compile + true + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-d-1.0.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-d-1.0.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-d-1.0.pom (revision 0) @@ -0,0 +1,7 @@ + + 4.0.0 + maven-test + maven-test-d + jar + 1.0 + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-d-1.2.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-d-1.2.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t06/maven-test/poms/maven-test-d-1.2.pom (revision 0) @@ -0,0 +1,7 @@ + + 4.0.0 + maven-test + maven-test-d + jar + 1.1 + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t07/p0/p1/pom.xml =================================================================== --- maven-project/src/test/resources/inheritance-repo/t07/p0/p1/pom.xml (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t07/p0/p1/pom.xml (revision 0) @@ -0,0 +1,54 @@ + + + p0 + maven + 1.0 + + 4.0.0 + maven + p1 + pom + p1 + 1.0 + + scm-url + + + + + maven-test + maven-test-b + 1.0 + + + maven-test + maven-test-d + 1.0 + test + false + + + --> + + + maven-test + maven-test-a + 1.0 + + + maven-test + maven-test-c + 1.0 + + + + + + maven-antrun-plugin + + ${project.parent.basedir} + + + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t07/p0/pom.xml =================================================================== --- maven-project/src/test/resources/inheritance-repo/t07/p0/pom.xml (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t07/p0/pom.xml (revision 0) @@ -0,0 +1,38 @@ + + 4.0.0 + maven + p0 + pom + p0 + 1.0 + + Codehaus + + + false + + + maven-test + maven-test-a + 1.0 + + + maven-test + maven-test-b + 1.1 + + + maven-test + maven-test-c + 1.0 + + + maven-test + maven-test-d + 1.2 + test + false + + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t07/maven-test/jars/maven-test-a-1.0.jar =================================================================== --- maven-project/src/test/resources/inheritance-repo/t07/maven-test/jars/maven-test-a-1.0.jar (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t07/maven-test/jars/maven-test-a-1.0.jar (revision 0) @@ -0,0 +1 @@ +foo Index: maven-project/src/test/resources/inheritance-repo/t07/maven-test/jars/maven-test-b-1.0.jar =================================================================== --- maven-project/src/test/resources/inheritance-repo/t07/maven-test/jars/maven-test-b-1.0.jar (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t07/maven-test/jars/maven-test-b-1.0.jar (revision 0) @@ -0,0 +1 @@ +foo Index: maven-project/src/test/resources/inheritance-repo/t07/maven-test/jars/maven-test-c-1.0.jar =================================================================== --- maven-project/src/test/resources/inheritance-repo/t07/maven-test/jars/maven-test-c-1.0.jar (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t07/maven-test/jars/maven-test-c-1.0.jar (revision 0) @@ -0,0 +1 @@ +foo Index: maven-project/src/test/resources/inheritance-repo/t07/maven-test/jars/maven-test-d-1.0.jar =================================================================== --- maven-project/src/test/resources/inheritance-repo/t07/maven-test/jars/maven-test-d-1.0.jar (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t07/maven-test/jars/maven-test-d-1.0.jar (revision 0) @@ -0,0 +1 @@ +foo Index: maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-a-1.0.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-a-1.0.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-a-1.0.pom (revision 0) @@ -0,0 +1,23 @@ + + 4.0.0 + maven-test + maven-test-a + jar + 1.0 + + + central + Fake Maven Central Repository + file://dummy + + + + + maven-test + maven-test-b + 1.0 + jar + compile + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-b-1.0.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-b-1.0.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-b-1.0.pom (revision 0) @@ -0,0 +1,24 @@ + + 4.0.0 + maven-test + maven-test-b + jar + 1.0 + + + maven-test + maven-test-c + 1.0 + jar + compile + + + maven-test + maven-test-d + 1.1 + jar + compile + true + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-c-1.0.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-c-1.0.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-c-1.0.pom (revision 0) @@ -0,0 +1,17 @@ + + 4.0.0 + maven-test + maven-test-c + jar + 1.0 + + + maven-test + maven-test-d + 1.1 + jar + compile + true + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-d-1.0.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-d-1.0.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-d-1.0.pom (revision 0) @@ -0,0 +1,7 @@ + + 4.0.0 + maven-test + maven-test-d + jar + 1.0 + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-d-1.2.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-d-1.2.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t07/maven-test/poms/maven-test-d-1.2.pom (revision 0) @@ -0,0 +1,7 @@ + + 4.0.0 + maven-test + maven-test-d + jar + 1.1 + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t08/p0/p1/pom.xml =================================================================== --- maven-project/src/test/resources/inheritance-repo/t08/p0/p1/pom.xml (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t08/p0/p1/pom.xml (revision 0) @@ -0,0 +1,59 @@ + + + p0 + maven + 1.0 + + 4.0.0 + maven + p1 + pom + p1 + 1.0 + + scm-url + + + + + maven-test + maven-test-b + 1.0 + + + maven-test + maven-test-d + 1.0 + test + true + + + --> + + + maven-test + maven-test-a + 1.0 + + + maven-test + maven-test-c + 1.0 + + + maven-test + maven-test-d + 1.0 + + + + + + maven-antrun-plugin + + ${project.parent.basedir} + + + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t08/p0/pom.xml =================================================================== --- maven-project/src/test/resources/inheritance-repo/t08/p0/pom.xml (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t08/p0/pom.xml (revision 0) @@ -0,0 +1,38 @@ + + 4.0.0 + maven + p0 + pom + p0 + 1.0 + + Codehaus + + + false + + + maven-test + maven-test-a + 1.0 + + + maven-test + maven-test-b + 1.1 + + + maven-test + maven-test-c + 1.0 + + + maven-test + maven-test-d + 1.2 + test + false + + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t08/maven-test/jars/maven-test-a-1.0.jar =================================================================== --- maven-project/src/test/resources/inheritance-repo/t08/maven-test/jars/maven-test-a-1.0.jar (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t08/maven-test/jars/maven-test-a-1.0.jar (revision 0) @@ -0,0 +1 @@ +foo Index: maven-project/src/test/resources/inheritance-repo/t08/maven-test/jars/maven-test-b-1.0.jar =================================================================== --- maven-project/src/test/resources/inheritance-repo/t08/maven-test/jars/maven-test-b-1.0.jar (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t08/maven-test/jars/maven-test-b-1.0.jar (revision 0) @@ -0,0 +1 @@ +foo Index: maven-project/src/test/resources/inheritance-repo/t08/maven-test/jars/maven-test-c-1.0.jar =================================================================== --- maven-project/src/test/resources/inheritance-repo/t08/maven-test/jars/maven-test-c-1.0.jar (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t08/maven-test/jars/maven-test-c-1.0.jar (revision 0) @@ -0,0 +1 @@ +foo Index: maven-project/src/test/resources/inheritance-repo/t08/maven-test/jars/maven-test-d-1.0.jar =================================================================== --- maven-project/src/test/resources/inheritance-repo/t08/maven-test/jars/maven-test-d-1.0.jar (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t08/maven-test/jars/maven-test-d-1.0.jar (revision 0) @@ -0,0 +1 @@ +foo Index: maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-a-1.0.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-a-1.0.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-a-1.0.pom (revision 0) @@ -0,0 +1,23 @@ + + 4.0.0 + maven-test + maven-test-a + jar + 1.0 + + + central + Fake Maven Central Repository + file://dummy + + + + + maven-test + maven-test-b + 1.0 + jar + compile + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-b-1.0.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-b-1.0.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-b-1.0.pom (revision 0) @@ -0,0 +1,24 @@ + + 4.0.0 + maven-test + maven-test-b + jar + 1.0 + + + maven-test + maven-test-c + 1.0 + jar + compile + + + maven-test + maven-test-d + 1.1 + jar + compile + false + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-c-1.0.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-c-1.0.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-c-1.0.pom (revision 0) @@ -0,0 +1,17 @@ + + 4.0.0 + maven-test + maven-test-c + jar + 1.0 + + + maven-test + maven-test-d + 1.1 + jar + compile + true + + + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-d-1.0.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-d-1.0.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-d-1.0.pom (revision 0) @@ -0,0 +1,7 @@ + + 4.0.0 + maven-test + maven-test-d + jar + 1.0 + \ No newline at end of file Index: maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-d-1.2.pom =================================================================== --- maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-d-1.2.pom (revision 0) +++ maven-project/src/test/resources/inheritance-repo/t08/maven-test/poms/maven-test-d-1.2.pom (revision 0) @@ -0,0 +1,7 @@ + + 4.0.0 + maven-test + maven-test-d + jar + 1.1 + \ No newline at end of file Index: maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java =================================================================== --- maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (revision 463259) +++ maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (working copy) @@ -32,6 +32,7 @@ import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.artifact.versioning.ManagedVersionMap; import org.apache.maven.model.Build; import org.apache.maven.model.Dependency; import org.apache.maven.model.DependencyManagement; @@ -271,6 +272,8 @@ MavenProject project = new MavenProject( superModel ); + project.setManagedVersionMap(createManagedVersionMap(projectId, superModel.getDependencyManagement(), null)); + project.setActiveProfiles( activeProfiles ); project.setOriginalModel( superModel ); @@ -331,7 +334,8 @@ String projectId = safeVersionlessKey( project.getGroupId(), project.getArtifactId() ); - Map managedVersions = createManagedVersionMap( projectId, project.getDependencyManagement() ); + // Map managedVersions = createManagedVersionMap( projectId, project.getDependencyManagement() ); + Map managedVersions = project.getManagedVersionMap(); ensureMetadataSourceIsInitialized(); @@ -383,13 +387,28 @@ } } - private Map createManagedVersionMap( String projectId, DependencyManagement dependencyManagement ) + private Map createManagedVersionMap( String projectId, DependencyManagement dependencyManagement, MavenProject parent) throws ProjectBuildingException { - Map map; - if ( dependencyManagement != null && dependencyManagement.getDependencies() != null ) + Map map = null; + boolean isOverride; + if (parent != null && parent.getDependencyManagement() != null && (parent.getDependencyManagement().isOverride() + || (dependencyManagement != null && dependencyManagement.isOverride()))) { - map = new HashMap(); + map = parent.getManagedVersionMap(); + } + List deps; + if ( dependencyManagement != null && (deps = dependencyManagement.getDependencies()) != null && deps.size() > 0) + { + map = new ManagedVersionMap(map, dependencyManagement.isOverride()); + org.codehaus.plexus.logging.Logger logger = getLogger(); + boolean isDebug = logger.isDebugEnabled(); + + if (isDebug) + { + logger.debug("Adding managed depedendencies for " + projectId); + } + for ( Iterator i = dependencyManagement.getDependencies().iterator(); i.hasNext(); ) { Dependency d = (Dependency) i.next(); @@ -401,6 +420,10 @@ versionRange, d.getType(), d.getClassifier(), d.getScope(), d.isOptional() ); + if (isDebug) + { + logger.debug(" " + artifact); + } map.put( d.getManagementKey(), artifact ); } catch ( InvalidVersionSpecificationException e ) @@ -410,7 +433,7 @@ } } } - else + else if (map == null) { map = Collections.EMPTY_MAP; } @@ -801,6 +824,8 @@ } } + project.setManagedVersionMap(createManagedVersionMap(projectId, project.getDependencyManagement(), project.getParent())); + return project; } @@ -1030,10 +1055,10 @@ Parent parentModel = model.getParent(); + String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() ); + if ( parentModel != null ) { - String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() ); - if ( StringUtils.isEmpty( parentModel.getGroupId() ) ) { throw new ProjectBuildingException( projectId, "Missing groupId element from parent element" ); Index: maven-project/src/main/java/org/apache/maven/project/MavenProject.java =================================================================== --- maven-project/src/main/java/org/apache/maven/project/MavenProject.java (revision 463259) +++ maven-project/src/main/java/org/apache/maven/project/MavenProject.java (working copy) @@ -31,6 +31,7 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.artifact.DependencyResolutionRequiredException; +import org.apache.maven.artifact.versioning.ManagedVersionMap; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; @@ -136,6 +137,8 @@ private Map extensionArtifactMap; + private Map managedVersionMap; + private Map projectReferences = new HashMap(); private Build buildOverlay; @@ -249,7 +252,12 @@ if ( project.artifact != null ) { this.artifact = ArtifactUtils.copyArtifact( project.artifact ); - } + } + + if (project.getManagedVersionMap() != null) + { + setManagedVersionMap(new ManagedVersionMap(project.getManagedVersionMap(), false)); + } } public String getModulePathAdjustment( MavenProject moduleProject ) throws IOException @@ -1478,6 +1486,16 @@ return originalModel; } + public void setManagedVersionMap(Map map) + { + this.managedVersionMap = map; + } + + public Map getManagedVersionMap() + { + return this.managedVersionMap; + } + public boolean equals( Object other ) { if ( other == this )