This is an automated email from the ASF dual-hosted git repository. khmarbaise pushed a commit to branch MNG-6492 in repository https://gitbox.apache.org/repos/asf/maven.git
commit b934686ab0388f5db5fe01453ed512d0e598fa68 Author: Sylwester Lachiewicz <slachiew...@apache.org> AuthorDate: Thu Oct 18 23:34:30 2018 +0200 [MNG-6490] Maven shall not fail reporting circular dependency when the dependency is a classified secondary artifact --- .../model/validation/DefaultModelValidator.java | 22 ++++++------ .../validation/DefaultModelValidatorTest.java | 7 ++++ .../raw-model/self-referencing-classifier.xml | 39 ++++++++++++++++++++++ 3 files changed, 57 insertions(+), 11 deletions(-) diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java b/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java index 4018618..1c84776 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java @@ -546,21 +546,21 @@ public class DefaultModelValidator List<Dependency> dependencies, String prefix, ModelBuildingRequest request ) { - // We only check for groupId/artifactId cause if there is another - // module with the same groupId/artifactId this will fail the build + // We only check for groupId/artifactId/version/classifier cause if there is another + // module with the same groupId/artifactId/version/classifier this will fail the build // earlier like "Project '...' is duplicated in the reactor. - // So it is sufficient to check only groupId/artifactId and not the + // So it is sufficient to check only groupId/artifactId/version/classifier and not the // packaging type. for ( Dependency dependency : dependencies ) { - String key = dependency.getGroupId() + ":" + dependency.getArtifactId() + ":" + dependency.getVersion(); + String key = dependency.getGroupId() + ":" + dependency.getArtifactId() + ":" + dependency.getVersion() + + ( dependency.getClassifier() != null ? ":" + dependency.getClassifier() : "" ); String mKey = m.getGroupId() + ":" + m.getArtifactId() + ":" + m.getVersion(); if ( key.equals( mKey ) ) { // This means a module which is build has a dependency which has the same - // groupId, artifactId and version coordinates. This is in consequence - // a self reference or in other words a circular reference which can not - // being resolved. + // groupId, artifactId, version and classifier coordinates. This is in consequence + // a self reference or in other words a circular reference which can not being resolved. addViolation( problems, Severity.FATAL, Version.V31, prefix + " " + key, key, "is referencing itself.", dependency ); @@ -605,14 +605,14 @@ public class DefaultModelValidator private void validateEffectiveModelAgainstDependency( String prefix, ModelProblemCollector problems, Model m, Dependency d, ModelBuildingRequest request ) { - String key = d.getGroupId() + ":" + d.getArtifactId() + ":" + d.getVersion(); + String key = d.getGroupId() + ":" + d.getArtifactId() + ":" + d.getVersion() + + ( d.getClassifier() != null ? ":" + d.getClassifier() : "" ); String mKey = m.getGroupId() + ":" + m.getArtifactId() + ":" + m.getVersion(); if ( key.equals( mKey ) ) { // This means a module which is build has a dependency which has the same - // groupId, artifactId and version coordinates. This is in consequence - // a self reference or in other words a circular reference which can not - // being resolved. + // groupId, artifactId, version and classifier coordinates. This is in consequence + // a self reference or in other words a circular reference which can not being resolved. addViolation( problems, Severity.FATAL, Version.V31, prefix + " " + key, key, "is referencing itself.", d ); } diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java index b02e0d9..3f31526 100644 --- a/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java +++ b/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java @@ -729,6 +729,13 @@ public class DefaultModelValidatorTest } + public void testSelfReferencingDependencyWithClassifierInRawModel() throws Exception + { + SimpleProblemCollector result = validateRaw( "raw-model/self-referencing-classifier.xml" ); + + assertViolations( result, 0, 0, 0 ); + } + public void testCiFriendlySha1() throws Exception { diff --git a/maven-model-builder/src/test/resources/poms/validation/raw-model/self-referencing-classifier.xml b/maven-model-builder/src/test/resources/poms/validation/raw-model/self-referencing-classifier.xml new file mode 100644 index 0000000..099e501 --- /dev/null +++ b/maven-model-builder/src/test/resources/poms/validation/raw-model/self-referencing-classifier.xml @@ -0,0 +1,39 @@ +<!-- +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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>com.example.group</groupId> + <artifactId>testvalidpom</artifactId> + <version>0.0.1-SNAPSHOT</version> + + <description> + This will test if the module validator recognized that this dependency with classifier + is not the same as the module itself. + </description> + <dependencies> + <dependency> + <groupId>com.example.group</groupId> + <artifactId>testvalidpom</artifactId> + <version>0.0.1-SNAPSHOT</version> + <classifier>linux</classifier> + </dependency> + </dependencies> +</project> \ No newline at end of file