You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/06/12 21:22:42 UTC
svn commit: r784241 - in /maven/components/trunk:
maven-core/src/test/java/org/apache/maven/project/
maven-core/src/test/resources-project-builder/dependencies-different-versions/
maven-core/src/test/resources-project-builder/unique-dependency-key/ mav...
Author: bentmann
Date: Fri Jun 12 19:22:41 2009
New Revision: 784241
URL: http://svn.apache.org/viewvc?rev=784241&view=rev
Log:
[MNG-4005] Throw Validation Error if pom contains a dependency with two different versions.
Added:
maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/ (with props)
maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/ (with props)
maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/ (with props)
maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml (with props)
maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml (with props)
maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/ (with props)
maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/ (with props)
maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/pom.xml (with props)
maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/pom.xml (with props)
Removed:
maven/components/trunk/maven-core/src/test/resources-project-builder/dependencies-different-versions/
Modified:
maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
Modified: maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java?rev=784241&r1=784240&r2=784241&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java (original)
+++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java Fri Jun 12 19:22:41 2009
@@ -167,21 +167,69 @@
}
- /*MNG-4005 - not implemented
- public void testDependenciesDifferentVersions()
+ /** MNG-4005 */
+ public void testValidationErrorUponNonUniqueDependencyKey()
throws Exception
{
- PomTestWrapper pom = buildPom( "dependencies-different-versions" );
+ try
+ {
+ buildPom( "unique-dependency-key/deps" );
+ fail( "Non-unique dependency keys did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+ public void testValidationErrorUponNonUniqueDependencyManagementKey()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "unique-dependency-key/dep-mngt" );
+ fail( "Non-unique dependency keys did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+
+ public void testValidationErrorUponNonUniqueDependencyKeyInProfile()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "unique-dependency-key/deps-in-profile" );
+ fail( "Non-unique dependency keys did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+
+ public void testValidationErrorUponNonUniqueDependencyManagementKeyInProfile()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "unique-dependency-key/dep-mngt-in-profile" );
+ fail( "Non-unique dependency keys did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
}
- */
public void testDuplicateDependenciesCauseLastDeclarationToBePickedInLenientMode()
throws Exception
{
- PomTestWrapper pom = buildPom( "dependencies-different-versions", true, null );
+ PomTestWrapper pom = buildPom( "unique-dependency-key/deps", true, null );
assertEquals( 1, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
- assertEquals( "1.1", pom.getValue( "dependencies[1]/version" ) );
+ assertEquals( "0.2", pom.getValue( "dependencies[1]/version" ) );
}
/* MNG-3567*/
@@ -1501,7 +1549,6 @@
catch ( ProjectBuildingException e )
{
// expected
- e.printStackTrace();
}
}
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/
------------------------------------------------------------------------------
bugtraq:label = Enter issue ID:
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/
------------------------------------------------------------------------------
bugtraq:message = Issue id: %BUGID%
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/
------------------------------------------------------------------------------
bugtraq:number = false
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/
------------------------------------------------------------------------------
bugtraq:url = http://jira.codehaus.org/browse/%BUGID%
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/
------------------------------------------------------------------------------
bugtraq:label = Enter issue ID:
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/
------------------------------------------------------------------------------
bugtraq:message = Issue id: %BUGID%
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/
------------------------------------------------------------------------------
bugtraq:number = false
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/
------------------------------------------------------------------------------
bugtraq:url = http://jira.codehaus.org/browse/%BUGID%
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/
------------------------------------------------------------------------------
bugtraq:label = Enter issue ID:
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/
------------------------------------------------------------------------------
bugtraq:message = Issue id: %BUGID%
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/
------------------------------------------------------------------------------
bugtraq:number = false
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/
------------------------------------------------------------------------------
bugtraq:url = http://jira.codehaus.org/browse/%BUGID%
Added: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml?rev=784241&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml (added)
+++ maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml Fri Jun 12 19:22:41 2009
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you 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.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <profiles>
+ <profile>
+ <id>test</id>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ </profile>
+ </profiles>
+</project>
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml?rev=784241&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml (added)
+++ maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml Fri Jun 12 19:22:41 2009
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you 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.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/
------------------------------------------------------------------------------
bugtraq:label = Enter issue ID:
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/
------------------------------------------------------------------------------
bugtraq:message = Issue id: %BUGID%
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/
------------------------------------------------------------------------------
bugtraq:number = false
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/
------------------------------------------------------------------------------
bugtraq:url = http://jira.codehaus.org/browse/%BUGID%
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/
------------------------------------------------------------------------------
bugtraq:label = Enter issue ID:
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/
------------------------------------------------------------------------------
bugtraq:message = Issue id: %BUGID%
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/
------------------------------------------------------------------------------
bugtraq:number = false
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/
------------------------------------------------------------------------------
bugtraq:url = http://jira.codehaus.org/browse/%BUGID%
Added: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/pom.xml?rev=784241&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/pom.xml (added)
+++ maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/pom.xml Fri Jun 12 19:22:41 2009
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you 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.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <profiles>
+ <profile>
+ <id>test</id>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </dependency>
+ </dependencies>
+ </profile>
+ </profiles>
+</project>
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/pom.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/pom.xml?rev=784241&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/pom.xml (added)
+++ maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/pom.xml Fri Jun 12 19:22:41 2009
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you 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.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </dependency>
+ </dependencies>
+</project>
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/pom.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java?rev=784241&r1=784240&r2=784241&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java Fri Jun 12 19:22:41 2009
@@ -20,9 +20,9 @@
*/
import java.io.File;
-import java.util.Collection;
-import java.util.HashSet;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.maven.model.Build;
import org.apache.maven.model.Dependency;
@@ -72,12 +72,29 @@
if ( !request.istLenientValidation() )
{
+ validateDependencies( result, model.getDependencies(), "dependencies" );
+
+ if ( model.getDependencyManagement() != null )
+ {
+ validateDependencies( result, model.getDependencyManagement().getDependencies(),
+ "dependencyManagment.dependencies" );
+ }
+
validateRepositories( result, model.getRepositories(), "repositories.repository" );
validateRepositories( result, model.getPluginRepositories(), "pluginRepositories.pluginRepository" );
for ( Profile profile : model.getProfiles() )
{
+ validateDependencies( result, profile.getDependencies(), "profiles.profile[" + profile.getId()
+ + "].dependencies" );
+
+ if ( profile.getDependencyManagement() != null )
+ {
+ validateDependencies( result, profile.getDependencyManagement().getDependencies(),
+ "profiles.profile[" + profile.getId() + "].dependencyManagment.dependencies" );
+ }
+
validateRepositories( result, profile.getRepositories(), "profiles.profile[" + profile.getId()
+ "].repositories.repository" );
@@ -246,20 +263,50 @@
}
}
+ private void validateDependencies( ModelValidationResult result, List<Dependency> dependencies, String prefix )
+ {
+ Map<String, Dependency> index = new HashMap<String, Dependency>();
+
+ for ( Dependency dependency : dependencies )
+ {
+ String key = dependency.getManagementKey();
+
+ Dependency existing = index.get( key );
+
+ if ( existing != null )
+ {
+ result.addMessage( "'" + prefix + ".(groupId:artifactId:type:classifier)' must be unique: " + key
+ + " -> " + existing.getVersion() + " vs " + dependency.getVersion() );
+ }
+ else
+ {
+ index.put( key, dependency );
+ }
+ }
+ }
+
private void validateRepositories( ModelValidationResult result, List<Repository> repositories, String prefix )
{
- Collection<String> ids = new HashSet<String>();
+ Map<String, Repository> index = new HashMap<String, Repository>();
- for ( Repository repository : repositories )
+ for ( Repository repository : repositories )
{
validateStringNotEmpty( prefix + ".id", result, repository.getId() );
validateStringNotEmpty( prefix + ".url", result, repository.getUrl() );
- if ( !ids.add( repository.getId() ) )
+ String key = repository.getId();
+
+ Repository existing = index.get( key );
+
+ if ( existing != null )
{
result.addMessage( "'" + prefix + ".id' must be unique: " + repository.getId() + " -> "
- + repository.getUrl() );
+ + existing.getUrl() + " vs " + repository.getUrl() );
+ }
+ else
+ {
+ index.put( key, repository );
}
}
}