Skip to content

Commit ad66d55

Browse files
committed
MSHADE-307 dropping useDefaultConfiguration to make the behavior by default + supporting SPI loading for Filter and ResourceTransformer to enable 'add and enable' behavior/auto configuration
1 parent f96c2e2 commit ad66d55

2 files changed

Lines changed: 48 additions & 46 deletions

File tree

src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java

Lines changed: 46 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
import java.util.LinkedList;
8282
import java.util.List;
8383
import java.util.Map;
84+
import java.util.ServiceLoader;
8485
import java.util.Set;
8586

8687
/**
@@ -367,15 +368,6 @@ public class ShadeMojo
367368
@Parameter( defaultValue = "false" )
368369
private boolean shadeTestJar;
369370

370-
/**
371-
* Auto-configure the mojo to use common transformers (ServicesResourceTransformer, ManifestTransformer)
372-
* and filters (META-INF/*.[SF,DSA,RSA]).
373-
*
374-
* @since 3.2.2
375-
*/
376-
@Parameter( defaultValue = "false" )
377-
private boolean useDefaultConfiguration;
378-
379371
/**
380372
* @since 1.6
381373
*/
@@ -785,11 +777,6 @@ private List<ResourceTransformer> getResourceTransformers()
785777

786778
private List<ResourceTransformer> getDefaultResourceTransformers()
787779
{
788-
if ( !useDefaultConfiguration )
789-
{
790-
return Collections.emptyList();
791-
}
792-
793780
final List<ResourceTransformer> transformers = new LinkedList<>();
794781
if ( missTransformer( ServicesResourceTransformer.class ) )
795782
{
@@ -801,6 +788,15 @@ private List<ResourceTransformer> getDefaultResourceTransformers()
801788
getLog().debug( "Adding ManifestResourceTransformer transformer" );
802789
transformers.add( new ManifestResourceTransformer() );
803790
}
791+
for ( final ResourceTransformer transformer : ServiceLoader.load( ResourceTransformer.class ) )
792+
{
793+
if ( !missTransformer( transformer.getClass() ) )
794+
{
795+
continue;
796+
}
797+
getLog().debug( "Adding " + transformer.getClass().getName() + " transformer" );
798+
transformers.add( transformer );
799+
}
804800
return transformers;
805801
}
806802

@@ -823,8 +819,8 @@ private boolean missTransformer( final Class<?> type )
823819
private List<Filter> getFilters()
824820
throws MojoExecutionException
825821
{
826-
List<Filter> filters = new ArrayList<Filter>();
827-
List<SimpleFilter> simpleFilters = new ArrayList<SimpleFilter>();
822+
List<Filter> filters = new LinkedList<Filter>();
823+
List<SimpleFilter> simpleFilters = new LinkedList<SimpleFilter>();
828824
Map<Artifact, ArtifactId> artifacts = null;
829825

830826
if ( this.filters != null && this.filters.length > 0 )
@@ -848,39 +844,48 @@ private List<Filter> getFilters()
848844
}
849845
}
850846

851-
if ( useDefaultConfiguration )
847+
// first check for backward compatibility this is not already configured explicitly
848+
boolean addExclusion = true;
849+
if ( this.filters != null )
852850
{
853-
// first check for backward compatibility this is not already configured explicitly
854-
boolean addExclusion = true;
855-
if ( this.filters != null )
851+
for ( final ArchiveFilter filter : this.filters )
856852
{
857-
for ( final ArchiveFilter filter : this.filters )
853+
if ( filter.getExcludes() != null
854+
&& filter.getExcludes().contains( "META-INF/*.SF" )
855+
&& filter.getExcludes().contains( "META-INF/*.DSA" )
856+
&& filter.getExcludes().contains( "META-INF/*.RSA" )
857+
&& "*:*".equals( filter.getArtifact() ) )
858858
{
859-
if ( filter.getExcludes() != null
860-
&& filter.getExcludes().contains( "META-INF/*.SF" )
861-
&& filter.getExcludes().contains( "META-INF/*.DSA" )
862-
&& filter.getExcludes().contains( "META-INF/*.RSA" )
863-
&& "*:*".equals( filter.getArtifact() ) )
864-
{
865-
addExclusion = false;
866-
break;
867-
}
859+
addExclusion = false;
860+
break;
868861
}
869862
}
870-
if ( addExclusion )
871-
{
872-
getLog().debug( "Adding META-INF/*.SF, META-INF/*.DSA and META-INF/*.RSA exclusion" );
863+
}
864+
if ( addExclusion )
865+
{
866+
getLog().debug( "Adding META-INF/*.SF, META-INF/*.DSA and META-INF/*.RSA exclusion" );
873867

874-
if ( artifacts == null )
875-
{
876-
artifacts = getArtifactIds();
877-
}
878-
simpleFilters.add( new SimpleFilter(
879-
getMatchingJars( artifacts , new ArtifactId( "*:*" ) ),
880-
Collections.<String>emptySet(),
881-
new HashSet<String>( Arrays.asList( "META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA" ) ) ) );
868+
if ( artifacts == null )
869+
{
870+
artifacts = getArtifactIds();
882871
}
872+
simpleFilters.add( new SimpleFilter(
873+
getMatchingJars( artifacts , new ArtifactId( "*:*" ) ),
874+
Collections.<String>emptySet(),
875+
new HashSet<String>( Arrays.asList( "META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA" ) ) ) );
876+
}
883877

878+
for ( final Filter filter : ServiceLoader.load( Filter.class ) )
879+
{
880+
getLog().debug( "Adding " + filter.getClass().getName() + " filter" );
881+
if ( SimpleFilter.class.isInstance( filter ) )
882+
{
883+
simpleFilters.add( SimpleFilter.class.cast( filter ) );
884+
}
885+
else
886+
{
887+
filters.add( filter );
888+
}
884889
}
885890

886891
filters.addAll( simpleFilters );

src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,6 @@ public void testDefaultConfiguration() throws Exception
6969
{
7070
final ShadeMojo shadeMojo = new ShadeMojo();
7171
setProject(shadeMojo);
72-
final Field useDefaultConfiguration = ShadeMojo.class.getDeclaredField("useDefaultConfiguration");
73-
useDefaultConfiguration.setAccessible(true);
74-
useDefaultConfiguration.set(shadeMojo, true);
7572

7673
// default transformers are present
7774
final Method getResourceTransformers = ShadeMojo.class.getDeclaredMethod("getResourceTransformers");
@@ -198,10 +195,10 @@ public void testShadeWithFilter()
198195
List<Filter> filters = (List<Filter>) getFilters.invoke( mojo);
199196

200197
// assertions - there must be one filter
201-
assertEquals( 1, filters.size() );
198+
assertEquals( 2, filters.size() );
202199

203200
// the filter must be able to filter the binary and the sources jar
204-
Filter filter = filters.get( 0 );
201+
Filter filter = filters.get( 1 ); // 0 is the built-in META-INF/*
205202
assertTrue( filter.canFilter( new File( "myfaces-impl-2.0.1-SNAPSHOT.jar" ) ) ); // binary jar
206203
assertTrue( filter.canFilter( new File( "myfaces-impl-2.0.1-SNAPSHOT-sources.jar" ) ) ); // sources jar
207204
}

0 commit comments

Comments
 (0)