From 4066f8ae46d839b8eb2390c4d7c41f782eb0ca2e Mon Sep 17 00:00:00 2001 From: Ray Tsang Date: Thu, 18 Jul 2019 18:25:19 +0300 Subject: [PATCH 1/2] [MNG-6713] Fix ExclusionArtifactFilter to respect wildcard exclusions. --- .../filter/ExclusionArtifactFilter.java | 22 +++- .../filter/ExclusionArtifactFilterTest.java | 123 ++++++++++++++++++ 2 files changed, 140 insertions(+), 5 deletions(-) create mode 100644 maven-core/src/test/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilterTest.java diff --git a/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java b/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java index 42390d640a26..fae069b9af0e 100644 --- a/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java +++ b/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java @@ -19,13 +19,13 @@ * under the License. */ -import java.util.List; - import org.apache.maven.artifact.Artifact; import org.apache.maven.model.Exclusion; +import java.util.List; + /** - * Filter to exclude from a list of artifact patterns. + * Filter to exclude from a list of artifact patterns. */ public class ExclusionArtifactFilter implements ArtifactFilter { @@ -41,8 +41,20 @@ public boolean include( Artifact artifact ) { for ( Exclusion exclusion : exclusions ) { - if ( exclusion.getGroupId().equals( artifact.getGroupId() ) - && exclusion.getArtifactId().equals( artifact.getArtifactId() ) ) + if ( "*".equals( exclusion.getGroupId() ) && "*".equals( exclusion.getArtifactId() ) ) + { + return false; + } + if ( "*".equals( exclusion.getGroupId() ) ) + { + return !exclusion.getArtifactId().equals( artifact.getArtifactId() ); + } + if ( "*".equals( exclusion.getArtifactId() ) ) + { + return !exclusion.getGroupId().equals( artifact.getGroupId() ); + } + if ( exclusion.getGroupId().equals( artifact.getGroupId() ) && exclusion.getArtifactId().equals( + artifact.getArtifactId() ) ) { return false; } diff --git a/maven-core/src/test/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilterTest.java b/maven-core/src/test/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilterTest.java new file mode 100644 index 000000000000..62a49111b777 --- /dev/null +++ b/maven-core/src/test/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilterTest.java @@ -0,0 +1,123 @@ +package org.apache.maven.artifact.resolver.filter; + +/* + * 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.apache.maven.artifact.Artifact; +import org.apache.maven.model.Exclusion; +import org.junit.Before; +import org.junit.Test; + +import java.util.Collections; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ExclusionArtifactFilterTest +{ + private Artifact artifact; + + @Before + public void setup() + { + artifact = mock( Artifact.class ); + when( artifact.getGroupId() ).thenReturn( "org.apache.maven" ); + when( artifact.getArtifactId() ).thenReturn( "maven-core" ); + } + + @Test + public void testExcludeExact() + { + Exclusion exclusion = new Exclusion(); + exclusion.setGroupId( "org.apache.maven" ); + exclusion.setArtifactId( "maven-core" ); + ExclusionArtifactFilter filter = new ExclusionArtifactFilter( Collections.singletonList( exclusion ) ); + + assertThat( filter.include( artifact ), is( false ) ); + } + + @Test + public void testExcludeNoMatch() + { + Exclusion exclusion = new Exclusion(); + exclusion.setGroupId( "org.apache.maven" ); + exclusion.setArtifactId( "maven-model" ); + ExclusionArtifactFilter filter = new ExclusionArtifactFilter( Collections.singletonList( exclusion ) ); + + assertThat( filter.include( artifact ), is( true ) ); + } + + @Test + public void testExcludeGroupIdWildcard() + { + Exclusion exclusion = new Exclusion(); + exclusion.setGroupId( "*" ); + exclusion.setArtifactId( "maven-core" ); + ExclusionArtifactFilter filter = new ExclusionArtifactFilter( Collections.singletonList( exclusion ) ); + + assertThat( filter.include( artifact ), is( false ) ); + } + + + @Test + public void testExcludeGroupIdWildcardNoMatch() + { + Exclusion exclusion = new Exclusion(); + exclusion.setGroupId( "*" ); + exclusion.setArtifactId( "maven-compat" ); + ExclusionArtifactFilter filter = new ExclusionArtifactFilter( Collections.singletonList( exclusion ) ); + + assertThat( filter.include( artifact ), is( true ) ); + } + + @Test + public void testExcludeArtifactIdWildcard() + { + Exclusion exclusion = new Exclusion(); + exclusion.setGroupId( "org.apache.maven" ); + exclusion.setArtifactId( "*" ); + ExclusionArtifactFilter filter = new ExclusionArtifactFilter( Collections.singletonList( exclusion ) ); + + assertThat( filter.include( artifact ), is( false ) ); + } + + @Test + public void testExcludeArtifactIdWildcardNoMatch() + { + Exclusion exclusion = new Exclusion(); + exclusion.setGroupId( "org.apache.groovy" ); + exclusion.setArtifactId( "*" ); + ExclusionArtifactFilter filter = new ExclusionArtifactFilter( Collections.singletonList( exclusion ) ); + + assertThat( filter.include( artifact ), is( true ) ); + } + + @Test + public void testExcludeAllWildcard() + { + Exclusion exclusion = new Exclusion(); + exclusion.setGroupId( "*" ); + exclusion.setArtifactId( "*" ); + ExclusionArtifactFilter filter = new ExclusionArtifactFilter( Collections.singletonList( exclusion ) ); + + assertThat( filter.include( artifact ), is( false ) ); + } +} \ No newline at end of file From 7657f262d85295577701ab303f229fcddb689c95 Mon Sep 17 00:00:00 2001 From: Ray Tsang Date: Mon, 5 Aug 2019 12:48:16 -0700 Subject: [PATCH 2/2] Moved `*` to a constant --- .../artifact/resolver/filter/ExclusionArtifactFilter.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java b/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java index fae069b9af0e..e0c9994f2ae8 100644 --- a/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java +++ b/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java @@ -29,6 +29,8 @@ */ public class ExclusionArtifactFilter implements ArtifactFilter { + private static final String WILDCARD = "*"; + private final List exclusions; public ExclusionArtifactFilter( List exclusions ) @@ -41,15 +43,15 @@ public boolean include( Artifact artifact ) { for ( Exclusion exclusion : exclusions ) { - if ( "*".equals( exclusion.getGroupId() ) && "*".equals( exclusion.getArtifactId() ) ) + if ( WILDCARD.equals( exclusion.getGroupId() ) && WILDCARD.equals( exclusion.getArtifactId() ) ) { return false; } - if ( "*".equals( exclusion.getGroupId() ) ) + if ( WILDCARD.equals( exclusion.getGroupId() ) ) { return !exclusion.getArtifactId().equals( artifact.getArtifactId() ); } - if ( "*".equals( exclusion.getArtifactId() ) ) + if ( WILDCARD.equals( exclusion.getArtifactId() ) ) { return !exclusion.getGroupId().equals( artifact.getGroupId() ); }