diff --git a/src/it/MSHADE-316/dependency/src/main/java/x/y/z/SomeDependencyOfExemptedClass.java b/src/it/MSHADE-316/dependency/src/main/java/x/y/z/SomeDependencyOfExemptedClass.java new file mode 100644 index 00000000..5c39166c --- /dev/null +++ b/src/it/MSHADE-316/dependency/src/main/java/x/y/z/SomeDependencyOfExemptedClass.java @@ -0,0 +1,24 @@ +/* + * 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. + */ + +package x.y.z; + +public class SomeDependencyOfExemptedClass +{ +} diff --git a/src/it/MSHADE-316/dependency/src/main/java/x/y/z/SomeExemptedClass.java b/src/it/MSHADE-316/dependency/src/main/java/x/y/z/SomeExemptedClass.java index f5ee2800..86e0a01a 100644 --- a/src/it/MSHADE-316/dependency/src/main/java/x/y/z/SomeExemptedClass.java +++ b/src/it/MSHADE-316/dependency/src/main/java/x/y/z/SomeExemptedClass.java @@ -21,4 +21,5 @@ public class SomeExemptedClass { + public SomeDependencyOfExemptedClass essentialDependency; } diff --git a/src/it/MSHADE-316/verify.bsh b/src/it/MSHADE-316/verify.bsh index 04919e08..1e570685 100644 --- a/src/it/MSHADE-316/verify.bsh +++ b/src/it/MSHADE-316/verify.bsh @@ -24,7 +24,8 @@ String[] wanted = "Main.class", "SomeUsedClass.class", "x/y/z/SomeExemptedClass.class", - "x/y/z/AnotherExemptedClass.class" + "x/y/z/AnotherExemptedClass.class", + "x/y/z/SomeDependencyOfExemptedClass.class" }; String[] unwanted = diff --git a/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java b/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java index 10606d28..608924b9 100644 --- a/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java +++ b/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java @@ -38,7 +38,6 @@ import java.util.Collections; import java.util.Enumeration; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.jar.JarEntry; @@ -171,7 +170,7 @@ private void removeServices( final MavenProject project, final Clazzpath cp ) } log.debug( className + " was not removed because it is a service" ); - removeClass( cp, clazz ); + removeClass( clazz ); repeatScan = true; // check whether the found classes use services in turn } } @@ -195,7 +194,7 @@ private void removeServices( final MavenProject project, final Clazzpath cp ) while ( repeatScan ); } - private void removeClass( final Clazzpath clazzPath, final Clazz clazz ) + private void removeClass( final Clazz clazz ) { removable.remove( clazz ); removable.removeAll( clazz.getTransitiveDependencies() ); @@ -267,16 +266,13 @@ private void removeSpecificallyIncludedClasses( MavenProject project, List clazzes = depClazzpathUnit.getClazzes(); - Iterator j = removable.iterator(); - while ( j.hasNext() ) + for ( final Clazz clazz : new HashSet<>( removable ) ) { - Clazz clazz = j.next(); - if ( clazzes.contains( clazz ) // && simpleFilter.isSpecificallyIncluded( clazz.getName().replace( '.', '/' ) ) ) { log.debug( clazz.getName() + " not removed because it was specifically included" ); - j.remove(); + removeClass( clazz ); } } }