Skip to content

Commit

Permalink
MSHADE-373: allow to specify optional target for resource transformers.
Browse files Browse the repository at this point in the history
  • Loading branch information
raphw committed Jul 2, 2020
1 parent 6ea8543 commit a62de61
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 10 deletions.
36 changes: 26 additions & 10 deletions src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
Expand Up @@ -458,31 +458,33 @@ public void execute()

List<ResourceTransformer> 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 );
}

if ( shadeTestJar )
{
ShadeRequest shadeTestRequest =
shadeRequest( testArtifacts, testJar, filters, relocators, resourceTransformers );
shadeRequest( "test-jar", testArtifacts, testJar, filters, relocators, resourceTransformers );

shader.shade( shadeTestRequest );
}

if ( createTestSourcesJar )
{
ShadeRequest shadeTestSourcesRequest =
createShadeSourcesRequest( testSourceArtifacts, testSourcesJar, filters, relocators,
resourceTransformers );
createShadeSourcesRequest( "test-sources-jar", testSourceArtifacts, testSourcesJar, filters,
relocators, resourceTransformers );

shader.shade( shadeTestSourcesRequest );
}
Expand Down Expand Up @@ -621,24 +623,24 @@ private void createErrorOutput()
getLog().error( "- You removed the configuration of the maven-jar-plugin that produces the main artifact." );
}

private ShadeRequest shadeRequest( Set<File> artifacts, File outputJar, List<Filter> filters,
private ShadeRequest shadeRequest( String shade, Set<File> artifacts, File outputJar, List<Filter> filters,
List<Relocator> relocators, List<ResourceTransformer> resourceTransformers )
{
ShadeRequest shadeRequest = new ShadeRequest();
shadeRequest.setJars( artifacts );
shadeRequest.setUberJar( outputJar );
shadeRequest.setFilters( filters );
shadeRequest.setRelocators( relocators );
shadeRequest.setResourceTransformers( resourceTransformers );
shadeRequest.setResourceTransformers( toResourceTransformers( shade, resourceTransformers ) );
return shadeRequest;
}

private ShadeRequest createShadeSourcesRequest( Set<File> testArtifacts, File testJar, List<Filter> filters,
List<Relocator> relocators,
private ShadeRequest createShadeSourcesRequest( String shade, Set<File> testArtifacts, File testJar,
List<Filter> filters, List<Relocator> relocators,
List<ResourceTransformer> resourceTransformers )
{
ShadeRequest shadeSourcesRequest =
shadeRequest( testArtifacts, testJar, filters, relocators, resourceTransformers );
shadeRequest( shade, testArtifacts, testJar, filters, relocators, resourceTransformers );
shadeSourcesRequest.setShadeSourcesContent( shadeSourcesContent );
return shadeSourcesRequest;
}
Expand Down Expand Up @@ -1314,4 +1316,18 @@ public boolean updateExcludesInDeps( MavenProject project, List<Dependency> depe
session.getProjectBuildingRequest().setProject( original );
}
}

private List<ResourceTransformer> toResourceTransformers(
String shade, List<ResourceTransformer> resourceTransformers )
{
List<ResourceTransformer> forShade = new ArrayList<ResourceTransformer>();
for ( ResourceTransformer transformer : resourceTransformers )
{
if ( transformer.isForShade( shade ) )
{
forShade.add( transformer );
}
}
return forShade;
}
}
Expand Up @@ -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<Relocator> relocators )
Expand Down
@@ -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<String> shades;

public final void setForShade( List<String> shades )
{
this.shades = shades;
}

public final boolean isForShade( String shade )
{
return shades == null || shades.isEmpty() || shades.contains( shade );
}
}
Expand Up @@ -46,4 +46,13 @@ void processResource( String resource, InputStream is, List<Relocator> 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<String> shades );

boolean isForShade( String target );
}
Expand Up @@ -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;
Expand All @@ -42,6 +43,7 @@
* @since 3.2.2
*/
public class PropertiesTransformer
extends AbstractResourceTransformer
implements ReproducibleResourceTransformer
{
private String resource;
Expand Down
Expand Up @@ -25,13 +25,15 @@
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;

/**
* Custom ReproducibleResourceTransformer for MSHADE-363_old-plugin IT, to check that it can be run with
* an older maven-shade-plugin that does not contain the ReproducibleResourceTransformer interface.
*/
public class CustomReproducibleResourceTransformer
extends AbstractResourceTransformer
implements ReproducibleResourceTransformer
{
@Override
Expand Down

0 comments on commit a62de61

Please sign in to comment.