[MNG-6213] Validate scope in dependencyManagement MNG-6526
authorMichael Warnecke <13361@nordakademie.de>
Sat, 23 Sep 2017 16:37:09 +0000 (18:37 +0200)
committerMichael Osipov <michaelo@apache.org>
Fri, 28 Dec 2018 22:45:45 +0000 (23:45 +0100)
This closes #131

maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java
maven-model-builder/src/test/resources/poms/validation/bad-dependency-management-scope.xml [new file with mode: 0644]

index 1c84776..f58d03a 100644 (file)
@@ -105,13 +105,13 @@ public class DefaultModelValidator
                                   + ", the parent element cannot have the same groupId:artifactId as the project.",
                               parent );
             }
-            
+
             if ( equals( "LATEST", parent.getVersion() ) || equals( "RELEASE", parent.getVersion() ) )
             {
                 addViolation( problems, Severity.WARNING, Version.BASE, "parent.version", null,
                               "is either LATEST or RELEASE (both of them are being deprecated)", parent );
             }
-            
+
         }
 
         if ( request.getValidationLevel() >= ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 )
@@ -598,6 +598,12 @@ public class DefaultModelValidator
 
                     validateEffectiveModelAgainstDependency( prefix, problems, m, d, request );
                 }
+                else
+                {
+                    validateEnum( prefix + "scope", problems, Severity.WARNING, Version.V20, d.getScope(),
+                                  d.getManagementKey(), d, "provided", "compile", "runtime", "test", "system",
+                                  "import" );
+                }
             }
         }
     }
index 3f31526..a9d4c00 100644 (file)
@@ -339,6 +339,16 @@ public class DefaultModelValidatorTest
         assertTrue( result.getWarnings().get( 1 ).contains( "test:g" ) );
     }
 
+    public void testBadDependencyManagementScope()
+        throws Exception
+    {
+        SimpleProblemCollector result = validate( "bad-dependency-management-scope.xml" );
+
+        assertViolations( result, 0, 0, 1 );
+
+        assertContains( result.getWarnings().get( 0 ), "test:g" );
+    }
+
     public void testBadDependencyVersion()
         throws Exception
     {
diff --git a/maven-model-builder/src/test/resources/poms/validation/bad-dependency-management-scope.xml b/maven-model-builder/src/test/resources/poms/validation/bad-dependency-management-scope.xml
new file mode 100644 (file)
index 0000000..be07267
--- /dev/null
@@ -0,0 +1,72 @@
+<!--
+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>
+  <artifactId>aid</artifactId>
+  <groupId>gid</groupId>
+  <version>0.1</version>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>test</groupId>
+        <artifactId>a</artifactId>
+        <version>0.2</version>
+      </dependency>
+      <dependency>
+        <groupId>test</groupId>
+        <artifactId>b</artifactId>
+        <version>0.2</version>
+        <scope>compile</scope>
+      </dependency>
+      <dependency>
+        <groupId>test</groupId>
+        <artifactId>c</artifactId>
+        <version>0.2</version>
+        <scope>runtime</scope>
+      </dependency>
+      <dependency>
+        <groupId>test</groupId>
+        <artifactId>d</artifactId>
+        <version>0.2</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>test</groupId>
+        <artifactId>e</artifactId>
+        <version>0.2</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>test</groupId>
+        <artifactId>f</artifactId>
+        <version>0.2</version>
+        <scope>import</scope>
+      </dependency>
+      <dependency>
+        <groupId>test</groupId>
+        <artifactId>g</artifactId>
+        <version>1</version>
+        <type>pom</type>
+        <scope>include</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+</project>