From a62de6165dfd8537f0603947f57a7e6bbb9b6ebf Mon Sep 17 00:00:00 2001 From: Rafael Winterhalter Date: Thu, 2 Jul 2020 20:26:26 +0200 Subject: [PATCH] MSHADE-373: allow to specify optional target for resource transformers. --- .../maven/plugins/shade/mojo/ShadeMojo.java | 36 +++++++++++----- .../AbstractCompatibilityTransformer.java | 1 + .../resource/AbstractResourceTransformer.java | 41 +++++++++++++++++++ .../shade/resource/ResourceTransformer.java | 9 ++++ .../properties/PropertiesTransformer.java | 2 + ...CustomReproducibleResourceTransformer.java | 2 + 6 files changed, 81 insertions(+), 10 deletions(-) create mode 100644 src/main/java/org/apache/maven/plugins/shade/resource/AbstractResourceTransformer.java diff --git a/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java b/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java index cf7cddff..827d32cd 100644 --- a/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java +++ b/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java @@ -458,14 +458,16 @@ public void execute() List resourceTransformers = getResourceTransformers(); - ShadeRequest shadeRequest = shadeRequest( artifacts, outputJar, filters, relocators, resourceTransformers ); + ShadeRequest shadeRequest = shadeRequest( "jar", artifacts, outputJar, filters, relocators, + resourceTransformers ); shader.shade( shadeRequest ); if ( createSourcesJar ) { ShadeRequest shadeSourcesRequest = - createShadeSourcesRequest( sourceArtifacts, sourcesJar, filters, relocators, resourceTransformers ); + createShadeSourcesRequest( "sources-jar", sourceArtifacts, sourcesJar, filters, relocators, + resourceTransformers ); shader.shade( shadeSourcesRequest ); } @@ -473,7 +475,7 @@ public void execute() if ( shadeTestJar ) { ShadeRequest shadeTestRequest = - shadeRequest( testArtifacts, testJar, filters, relocators, resourceTransformers ); + shadeRequest( "test-jar", testArtifacts, testJar, filters, relocators, resourceTransformers ); shader.shade( shadeTestRequest ); } @@ -481,8 +483,8 @@ public void execute() if ( createTestSourcesJar ) { ShadeRequest shadeTestSourcesRequest = - createShadeSourcesRequest( testSourceArtifacts, testSourcesJar, filters, relocators, - resourceTransformers ); + createShadeSourcesRequest( "test-sources-jar", testSourceArtifacts, testSourcesJar, filters, + relocators, resourceTransformers ); shader.shade( shadeTestSourcesRequest ); } @@ -621,7 +623,7 @@ private void createErrorOutput() getLog().error( "- You removed the configuration of the maven-jar-plugin that produces the main artifact." ); } - private ShadeRequest shadeRequest( Set artifacts, File outputJar, List filters, + private ShadeRequest shadeRequest( String shade, Set artifacts, File outputJar, List filters, List relocators, List resourceTransformers ) { ShadeRequest shadeRequest = new ShadeRequest(); @@ -629,16 +631,16 @@ private ShadeRequest shadeRequest( Set artifacts, File outputJar, List testArtifacts, File testJar, List filters, - List relocators, + private ShadeRequest createShadeSourcesRequest( String shade, Set testArtifacts, File testJar, + List filters, List relocators, List resourceTransformers ) { ShadeRequest shadeSourcesRequest = - shadeRequest( testArtifacts, testJar, filters, relocators, resourceTransformers ); + shadeRequest( shade, testArtifacts, testJar, filters, relocators, resourceTransformers ); shadeSourcesRequest.setShadeSourcesContent( shadeSourcesContent ); return shadeSourcesRequest; } @@ -1314,4 +1316,18 @@ public boolean updateExcludesInDeps( MavenProject project, List depe session.getProjectBuildingRequest().setProject( original ); } } + + private List toResourceTransformers( + String shade, List resourceTransformers ) + { + List forShade = new ArrayList(); + for ( ResourceTransformer transformer : resourceTransformers ) + { + if ( transformer.isForShade( shade ) ) + { + forShade.add( transformer ); + } + } + return forShade; + } } diff --git a/src/main/java/org/apache/maven/plugins/shade/resource/AbstractCompatibilityTransformer.java b/src/main/java/org/apache/maven/plugins/shade/resource/AbstractCompatibilityTransformer.java index 392ddb96..dca78402 100644 --- a/src/main/java/org/apache/maven/plugins/shade/resource/AbstractCompatibilityTransformer.java +++ b/src/main/java/org/apache/maven/plugins/shade/resource/AbstractCompatibilityTransformer.java @@ -29,6 +29,7 @@ * An abstract class to implement once the old non-reproducible ResourceTransformer API. */ abstract class AbstractCompatibilityTransformer + extends AbstractResourceTransformer implements ReproducibleResourceTransformer { public final void processResource( String resource, InputStream is, List relocators ) diff --git a/src/main/java/org/apache/maven/plugins/shade/resource/AbstractResourceTransformer.java b/src/main/java/org/apache/maven/plugins/shade/resource/AbstractResourceTransformer.java new file mode 100644 index 00000000..a7b27cdd --- /dev/null +++ b/src/main/java/org/apache/maven/plugins/shade/resource/AbstractResourceTransformer.java @@ -0,0 +1,41 @@ +package org.apache.maven.plugins.shade.resource; + +/* + * 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 java.util.List; + +/** + * An abstract resource transformer implementing the eligible shades. + */ +public abstract class AbstractResourceTransformer implements ResourceTransformer +{ + + private List shades; + + public final void setForShade( List shades ) + { + this.shades = shades; + } + + public final boolean isForShade( String shade ) + { + return shades == null || shades.isEmpty() || shades.contains( shade ); + } +} diff --git a/src/main/java/org/apache/maven/plugins/shade/resource/ResourceTransformer.java b/src/main/java/org/apache/maven/plugins/shade/resource/ResourceTransformer.java index 7b766667..3b387c9d 100644 --- a/src/main/java/org/apache/maven/plugins/shade/resource/ResourceTransformer.java +++ b/src/main/java/org/apache/maven/plugins/shade/resource/ResourceTransformer.java @@ -46,4 +46,13 @@ void processResource( String resource, InputStream is, List relocator void modifyOutputStream( JarOutputStream os ) throws IOException; + + /** + * The shades to apply this transformer to or no shades if no filter is applied. + * + * @param shades {@code jar}, {@code test-jar}, {@code sources-jar} or {@code test-sources-jar}. + */ + void setForShade( List shades ); + + boolean isForShade( String target ); } diff --git a/src/main/java/org/apache/maven/plugins/shade/resource/properties/PropertiesTransformer.java b/src/main/java/org/apache/maven/plugins/shade/resource/properties/PropertiesTransformer.java index 9b927973..22f089c4 100644 --- a/src/main/java/org/apache/maven/plugins/shade/resource/properties/PropertiesTransformer.java +++ b/src/main/java/org/apache/maven/plugins/shade/resource/properties/PropertiesTransformer.java @@ -32,6 +32,7 @@ import java.util.jar.JarOutputStream; import org.apache.maven.plugins.shade.relocation.Relocator; +import org.apache.maven.plugins.shade.resource.AbstractResourceTransformer; import org.apache.maven.plugins.shade.resource.ReproducibleResourceTransformer; import org.apache.maven.plugins.shade.resource.properties.io.NoCloseOutputStream; import org.apache.maven.plugins.shade.resource.properties.io.SkipPropertiesDateLineWriter; @@ -42,6 +43,7 @@ * @since 3.2.2 */ public class PropertiesTransformer + extends AbstractResourceTransformer implements ReproducibleResourceTransformer { private String resource; diff --git a/src/test/java/org/apache/maven/plugins/shade/custom/CustomReproducibleResourceTransformer.java b/src/test/java/org/apache/maven/plugins/shade/custom/CustomReproducibleResourceTransformer.java index eef5744c..fbef2e72 100644 --- a/src/test/java/org/apache/maven/plugins/shade/custom/CustomReproducibleResourceTransformer.java +++ b/src/test/java/org/apache/maven/plugins/shade/custom/CustomReproducibleResourceTransformer.java @@ -25,6 +25,7 @@ import java.util.jar.JarOutputStream; import org.apache.maven.plugins.shade.relocation.Relocator; +import org.apache.maven.plugins.shade.resource.AbstractResourceTransformer; import org.apache.maven.plugins.shade.resource.ReproducibleResourceTransformer; /** @@ -32,6 +33,7 @@ * an older maven-shade-plugin that does not contain the ReproducibleResourceTransformer interface. */ public class CustomReproducibleResourceTransformer + extends AbstractResourceTransformer implements ReproducibleResourceTransformer { @Override