Skip to content

Commit 229f4d7

Browse files
committed
[MSHADE-363] add ReproducibleResourceTransformer to keep compatibility
1 parent 51bbf72 commit 229f4d7

18 files changed

+142
-36
lines changed

src/main/java/org/apache/maven/plugins/shade/DefaultShader.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.apache.maven.plugins.shade.filter.Filter;
5050
import org.apache.maven.plugins.shade.relocation.Relocator;
5151
import org.apache.maven.plugins.shade.resource.ManifestResourceTransformer;
52+
import org.apache.maven.plugins.shade.resource.ReproducibleResourceTransformer;
5253
import org.apache.maven.plugins.shade.resource.ResourceTransformer;
5354
import org.codehaus.plexus.component.annotations.Component;
5455
import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -76,15 +77,15 @@ public void shade( ShadeRequest shadeRequest )
7677
{
7778
Set<String> resources = new HashSet<>();
7879

79-
ResourceTransformer manifestTransformer = null;
80+
ManifestResourceTransformer manifestTransformer = null;
8081
List<ResourceTransformer> transformers =
8182
new ArrayList<>( shadeRequest.getResourceTransformers() );
8283
for ( Iterator<ResourceTransformer> it = transformers.iterator(); it.hasNext(); )
8384
{
8485
ResourceTransformer transformer = it.next();
8586
if ( transformer instanceof ManifestResourceTransformer )
8687
{
87-
manifestTransformer = transformer;
88+
manifestTransformer = (ManifestResourceTransformer) transformer;
8889
it.remove();
8990
}
9091
}
@@ -265,11 +266,11 @@ else if ( shadeRequest.isShadeSourcesContent() && name.endsWith( ".java" ) )
265266
}
266267

267268
private void goThroughAllJarEntriesForManifestTransformer( ShadeRequest shadeRequest, Set<String> resources,
268-
ResourceTransformer resourceTransformer,
269+
ManifestResourceTransformer manifestTransformer,
269270
JarOutputStream jos )
270271
throws IOException
271272
{
272-
if ( resourceTransformer != null )
273+
if ( manifestTransformer != null )
273274
{
274275
for ( File jar : shadeRequest.getJars() )
275276
{
@@ -279,22 +280,22 @@ private void goThroughAllJarEntriesForManifestTransformer( ShadeRequest shadeReq
279280
{
280281
JarEntry entry = en.nextElement();
281282
String resource = entry.getName();
282-
if ( resourceTransformer.canTransformResource( resource ) )
283+
if ( manifestTransformer.canTransformResource( resource ) )
283284
{
284285
resources.add( resource );
285286
try ( InputStream inputStream = jarFile.getInputStream( entry ) )
286287
{
287-
resourceTransformer.processResource( resource, inputStream,
288-
shadeRequest.getRelocators(), entry.getTime() );
288+
manifestTransformer.processResource( resource, inputStream,
289+
shadeRequest.getRelocators(), entry.getTime() );
289290
}
290291
break;
291292
}
292293
}
293294
}
294295
}
295-
if ( resourceTransformer.hasTransformedResource() )
296+
if ( manifestTransformer.hasTransformedResource() )
296297
{
297-
resourceTransformer.modifyOutputStream( jos );
298+
manifestTransformer.modifyOutputStream( jos );
298299
}
299300
}
300301
}
@@ -544,7 +545,14 @@ private boolean resourceTransformed( List<ResourceTransformer> resourceTransform
544545
{
545546
getLogger().debug( "Transforming " + name + " using " + transformer.getClass().getName() );
546547

547-
transformer.processResource( name, is, relocators, time );
548+
if ( transformer instanceof ReproducibleResourceTransformer )
549+
{
550+
( (ReproducibleResourceTransformer) transformer ).processResource( name, is, relocators, time );
551+
}
552+
else
553+
{
554+
transformer.processResource( name, is, relocators );
555+
}
548556

549557
resourceTransformed = true;
550558

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.apache.maven.plugins.shade.resource;
2+
3+
/*
4+
* Licensed to the Apache Software Foundation (ASF) under one
5+
* or more contributor license agreements. See the NOTICE file
6+
* distributed with this work for additional information
7+
* regarding copyright ownership. The ASF licenses this file
8+
* to you under the Apache License, Version 2.0 (the
9+
* "License"); you may not use this file except in compliance
10+
* with the License. You may obtain a copy of the License at
11+
*
12+
* http://www.apache.org/licenses/LICENSE-2.0
13+
*
14+
* Unless required by applicable law or agreed to in writing,
15+
* software distributed under the License is distributed on an
16+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17+
* KIND, either express or implied. See the License for the
18+
* specific language governing permissions and limitations
19+
* under the License.
20+
*/
21+
22+
import org.apache.maven.plugins.shade.relocation.Relocator;
23+
24+
import java.io.IOException;
25+
import java.io.InputStream;
26+
import java.util.List;
27+
28+
/**
29+
* An abstract class to implement once the old non-reproducible ResourceTransformer API.
30+
*/
31+
abstract class AbstractCompatibilityTransformer
32+
implements ReproducibleResourceTransformer
33+
{
34+
public final void processResource( String resource, InputStream is, List<Relocator> relocators )
35+
throws IOException
36+
{
37+
processResource( resource, is, relocators, 0 );
38+
}
39+
}

src/main/java/org/apache/maven/plugins/shade/resource/ApacheLicenseResourceTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
* Prevents duplicate copies of the license
3131
*/
3232
public class ApacheLicenseResourceTransformer
33-
implements ResourceTransformer
33+
extends AbstractCompatibilityTransformer
3434
{
3535
private static final String LICENSE_PATH = "META-INF/LICENSE";
3636

src/main/java/org/apache/maven/plugins/shade/resource/ApacheNoticeResourceTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
* Merges <code>META-INF/NOTICE.TXT</code> files.
4444
*/
4545
public class ApacheNoticeResourceTransformer
46-
implements ResourceTransformer
46+
extends AbstractCompatibilityTransformer
4747
{
4848
Set<String> entries = new LinkedHashSet<>();
4949

src/main/java/org/apache/maven/plugins/shade/resource/AppendingTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
* A resource processor that appends content for a resource, separated by a newline.
3434
*/
3535
public class AppendingTransformer
36-
implements ResourceTransformer
36+
extends AbstractCompatibilityTransformer
3737
{
3838
String resource;
3939

src/main/java/org/apache/maven/plugins/shade/resource/ComponentsXmlResourceTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
* A resource processor that aggregates plexus <code>components.xml</code> files.
4343
*/
4444
public class ComponentsXmlResourceTransformer
45-
implements ResourceTransformer
45+
extends AbstractCompatibilityTransformer
4646
{
4747
private Map<String, Xpp3Dom> components = new LinkedHashMap<>();
4848

src/main/java/org/apache/maven/plugins/shade/resource/DontIncludeResourceTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
* resource into the shaded JAR.
3333
*/
3434
public class DontIncludeResourceTransformer
35-
implements ResourceTransformer
35+
extends AbstractCompatibilityTransformer
3636
{
3737
String resource;
3838

src/main/java/org/apache/maven/plugins/shade/resource/GroovyResourceTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
* Aggregate Apache Groovy extension modules descriptors
3737
*/
3838
public class GroovyResourceTransformer
39-
implements ResourceTransformer
39+
extends AbstractCompatibilityTransformer
4040
{
4141

4242
static final String EXT_MODULE_NAME_LEGACY = "META-INF/services/org.codehaus.groovy.runtime.ExtensionModule";

src/main/java/org/apache/maven/plugins/shade/resource/IncludeResourceTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
* content into the shaded JAR.
3636
*/
3737
public class IncludeResourceTransformer
38-
implements ResourceTransformer
38+
extends AbstractCompatibilityTransformer
3939
{
4040
File file;
4141

src/main/java/org/apache/maven/plugins/shade/resource/ManifestResourceTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
* @since 1.2
4242
*/
4343
public class ManifestResourceTransformer
44-
implements ResourceTransformer
44+
extends AbstractCompatibilityTransformer
4545
{
4646
private final List<String> defaultAttributes = Arrays.asList( "Export-Package",
4747
"Import-Package",

0 commit comments

Comments
 (0)