mirror of https://github.com/apache/maven.git
o Restored backward-compat with regard to handling of duplicate dependencies during metadata retrieval
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@784227 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
60496472c7
commit
425f632772
|
@ -176,6 +176,14 @@ public class PomConstructionTest
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
public void testDuplicateDependenciesCauseLastDeclarationToBePickedInLenientMode()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
PomTestWrapper pom = buildPom( "dependencies-different-versions", true, null );
|
||||||
|
assertEquals( 1, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
|
||||||
|
assertEquals( "1.1", pom.getValue( "dependencies[1]/version" ) );
|
||||||
|
}
|
||||||
|
|
||||||
/* MNG-3567*/
|
/* MNG-3567*/
|
||||||
public void testParentInterpolation()
|
public void testParentInterpolation()
|
||||||
throws Exception
|
throws Exception
|
||||||
|
@ -1573,6 +1581,13 @@ public class PomConstructionTest
|
||||||
|
|
||||||
private PomTestWrapper buildPom( String pomPath, Properties executionProperties, String... profileIds )
|
private PomTestWrapper buildPom( String pomPath, Properties executionProperties, String... profileIds )
|
||||||
throws ProjectBuildingException
|
throws ProjectBuildingException
|
||||||
|
{
|
||||||
|
return buildPom( pomPath, false, executionProperties, profileIds );
|
||||||
|
}
|
||||||
|
|
||||||
|
private PomTestWrapper buildPom( String pomPath, boolean lenientValidation, Properties executionProperties,
|
||||||
|
String... profileIds )
|
||||||
|
throws ProjectBuildingException
|
||||||
{
|
{
|
||||||
File pomFile = new File( testDirectory, pomPath );
|
File pomFile = new File( testDirectory, pomPath );
|
||||||
if ( pomFile.isDirectory() )
|
if ( pomFile.isDirectory() )
|
||||||
|
@ -1582,12 +1597,14 @@ public class PomConstructionTest
|
||||||
|
|
||||||
ProjectBuildingRequest config = new DefaultProjectBuildingRequest();
|
ProjectBuildingRequest config = new DefaultProjectBuildingRequest();
|
||||||
|
|
||||||
String localRepoUrl = System.getProperty( "maven.repo.local", System.getProperty( "user.home" ) + "/.m2/repository" );
|
String localRepoUrl =
|
||||||
|
System.getProperty( "maven.repo.local", System.getProperty( "user.home" ) + "/.m2/repository" );
|
||||||
localRepoUrl = "file://" + localRepoUrl;
|
localRepoUrl = "file://" + localRepoUrl;
|
||||||
config.setLocalRepository( new DefaultArtifactRepository( "local", localRepoUrl, new DefaultRepositoryLayout() ) );
|
config.setLocalRepository( new DefaultArtifactRepository( "local", localRepoUrl, new DefaultRepositoryLayout() ) );
|
||||||
config.setActiveProfileIds( Arrays.asList( profileIds ) );
|
config.setActiveProfileIds( Arrays.asList( profileIds ) );
|
||||||
config.setExecutionProperties( executionProperties );
|
config.setExecutionProperties( executionProperties );
|
||||||
|
config.setLenientValidation( lenientValidation );
|
||||||
|
|
||||||
return new PomTestWrapper( pomFile, projectBuilder.build( pomFile, config ) );
|
return new PomTestWrapper( pomFile, projectBuilder.build( pomFile, config ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,21 @@ public class DefaultModelNormalizer
|
||||||
|
|
||||||
build.setPlugins( new ArrayList<Plugin>( normalized.values() ) );
|
build.setPlugins( new ArrayList<Plugin>( normalized.values() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( request.istLenientValidation() )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* NOTE: This is to keep backward-compat with Maven 2.x which did not validate that dependencies are unique
|
||||||
|
* within a single POM. Upon multiple declarations, 2.x just kept the last one. So when we're in lenient
|
||||||
|
* mode for metadata retrieval, we have to deal with such broken POMs and mimic the way 2.x works.
|
||||||
|
*/
|
||||||
|
Map<String, Dependency> dependencies = new LinkedHashMap<String, Dependency>();
|
||||||
|
for ( Dependency dependency : model.getDependencies() )
|
||||||
|
{
|
||||||
|
dependencies.put( dependency.getManagementKey(), dependency );
|
||||||
|
}
|
||||||
|
model.setDependencies( new ArrayList<Dependency>( dependencies.values() ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class DuplicateMerger
|
private static class DuplicateMerger
|
||||||
|
|
Loading…
Reference in New Issue