You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by el...@apache.org on 2021/03/11 23:56:57 UTC

[maven-enforcer] 01/01: fix: include classifiers in error messages

This is an automated email from the ASF dual-hosted git repository.

elharo pushed a commit to branch MENFORCER-381
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git

commit e48ef741173c57fa1b43a960db107b40cff49536
Author: Elliotte Rusty Harold <el...@google.com>
AuthorDate: Thu Mar 11 18:56:24 2021 -0500

    fix: include classifiers in error messages
---
 .../plugins/enforcer/RequireUpperBoundDeps.java    | 42 ++++++++---------
 .../maven/plugins/enforcer/EnforcerTestUtils.java  | 48 ++++++++++++++++++-
 .../enforcer/RequireUpperBoundDepsTest.java        | 54 ++++++++++++++++++++++
 .../enforcer/utils/EnforcerRuleUtilsHelper.java    |  2 +-
 4 files changed, 123 insertions(+), 23 deletions(-)

diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java
index 7eee9ae..d74336d 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java
@@ -157,23 +157,16 @@ public class RequireUpperBoundDeps
         {
             log = helper.getLog();
         }
-        try
-        {
-            DependencyNode node = getNode( helper );
-            RequireUpperBoundDepsVisitor visitor = new RequireUpperBoundDepsVisitor();
-            visitor.setUniqueVersions( uniqueVersions );
-            visitor.setIncludes( includes );
-            node.accept( visitor );
-            List<String> errorMessages = buildErrorMessages( visitor.getConflicts() );
-            if ( errorMessages.size() > 0 )
-            {
-                throw new EnforcerRuleException( "Failed while enforcing RequireUpperBoundDeps. The error(s) are "
-                    + errorMessages );
-            }
-        }
-        catch ( Exception e )
+        DependencyNode node = getNode( helper );
+        RequireUpperBoundDepsVisitor visitor = new RequireUpperBoundDepsVisitor();
+        visitor.setUniqueVersions( uniqueVersions );
+        visitor.setIncludes( includes );
+        node.accept( visitor );
+        List<String> errorMessages = buildErrorMessages( visitor.getConflicts() );
+        if ( errorMessages.size() > 0 )
         {
-            throw new EnforcerRuleException( e.getLocalizedMessage(), e );
+            throw new EnforcerRuleException( "Failed while enforcing RequireUpperBoundDeps. The error(s) are "
+                + errorMessages );
         }
     }
 
@@ -256,15 +249,22 @@ public class RequireUpperBoundDeps
         }
         String result = artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + version;
 
-        if ( "compile".equals( artifact.getScope() ) )
+        String classifier = artifact.getClassifier();
+        if ( classifier != null && !classifier.isEmpty() )
         {
-            return MessageUtils.buffer().strong( result ).toString();
+            result += ":" + classifier;
         }
-        if ( artifact.getScope() != null )
+  
+        String scope = artifact.getScope();      
+        if ( "compile".equals( scope ) )
         {
-            return result + " [" + artifact.getScope() + ']';
+            result = MessageUtils.buffer().strong( result ).toString();
         }
-
+        else if ( scope != null )
+        {
+            result += " [" + scope + ']';
+        }
+        
         return result;
     }
 
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java
index 763a2a5..5a4f086 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java
@@ -24,6 +24,14 @@ import static org.mockito.Mockito.when;
 
 import java.util.Properties;
 
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactCollector;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
 import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.MavenExecutionResult;
@@ -34,8 +42,16 @@ import org.apache.maven.plugin.PluginParameterExpressionEvaluator;
 import org.apache.maven.plugin.logging.SystemStreamLog;
 import org.apache.maven.plugins.enforcer.utils.MockEnforcerExpressionEvaluator;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.dependency.tree.DefaultDependencyTreeBuilder;
+import org.apache.maven.shared.dependency.tree.DependencyNode;
+import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
+import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.mockito.ArgumentMatchers;
+import org.mockito.Matchers;
+import org.mockito.Mockito;
 
 /**
  * The Class EnforcerTestUtils.
@@ -117,7 +133,37 @@ public final class EnforcerTestUtils
             session.setCurrentProject( project );
             eval = new PluginParameterExpressionEvaluator( session, mockExecution );
         }
-        return new DefaultEnforcementRuleHelper( session, eval, new SystemStreamLog(), null );
+        PlexusContainer container = Mockito.mock( PlexusContainer.class );
+        
+        Artifact artifact = new DefaultArtifact( "groupId", "artifactId", "version", "compile", "jar",
+                                                 "classifier", null );
+        Artifact v1 = new DefaultArtifact( "groupId", "artifact", "1.0.0", "compile", "jar", "", null );
+        Artifact v2 = new DefaultArtifact( "groupId", "artifact", "2.0.0", "compile", "jar", "", null );
+        final DependencyNode node = new DependencyNode( artifact );
+        DependencyNode child1 = new DependencyNode( v1 );
+        DependencyNode child2 = new DependencyNode( v2 );
+        node.addChild( child1 );
+        node.addChild( child2 );
+        
+        DependencyTreeBuilder dependencyTreeBuilder = new DefaultDependencyTreeBuilder() {
+            @Override
+            public DependencyNode buildDependencyTree( MavenProject project, ArtifactRepository repository,
+                   ArtifactFactory factory, ArtifactMetadataSource metadataSource,
+                   ArtifactFilter filter, ArtifactCollector collector )
+                throws DependencyTreeBuilderException {
+                 return node;
+            }
+        };
+
+        try
+        {
+            Mockito.when( container.lookup( DependencyTreeBuilder.class ) ).thenReturn( dependencyTreeBuilder  );
+        }
+        catch ( ComponentLookupException e )
+        {
+            // test will fail
+        }
+        return new DefaultEnforcementRuleHelper( session, eval, new SystemStreamLog(), container );
     }
 
     /**
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDepsTest.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDepsTest.java
new file mode 100644
index 0000000..621373f
--- /dev/null
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDepsTest.java
@@ -0,0 +1,54 @@
+package org.apache.maven.plugins.enforcer;
+
+import org.junit.Assert;
+
+/*
+ * 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.
+ */
+
+import org.junit.Test;
+
+import java.io.IOException;
+
+import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+import org.apache.maven.plugin.testing.ArtifactStubFactory;
+
+public class RequireUpperBoundDepsTest
+{
+
+    @Test
+    public void testRule() throws IOException
+    {
+        ArtifactStubFactory factory = new ArtifactStubFactory();
+        MockProject project = new MockProject();
+        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper( project );
+        project.setArtifacts( factory.getMixedArtifacts() );
+        project.setDependencyArtifacts( factory.getScopedArtifacts() );
+        RequireUpperBoundDeps rule = new RequireUpperBoundDeps();
+
+        try {
+          rule.execute( helper );
+          Assert.fail("Did not detect upper bounds error");
+        }
+        catch ( EnforcerRuleException ex ) {
+            Assert.assertTrue( ex.getMessage(), ex.getMessage().contains( "groupId:artifactId:version:classifier" ) );
+        }
+    }
+
+}
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/utils/EnforcerRuleUtilsHelper.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/utils/EnforcerRuleUtilsHelper.java
index 37d98bc..1600b9b 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/utils/EnforcerRuleUtilsHelper.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/utils/EnforcerRuleUtilsHelper.java
@@ -54,7 +54,7 @@ public class EnforcerRuleUtilsHelper
         {
             if ( !shouldFail )
             {
-                fail( "No Exception expected:" + e.getLocalizedMessage() );
+                fail( "No Exception expected:" + e.getMessage() );
             }
             helper.getLog().debug( e.getMessage() );
         }