Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.4.3
-
None
-
Patch, Important
Description
If an exclude pattern is specified on a relocator, the ServicesResourceTransformer ignores them.
This is demonstrated by the test, and fixed in the following:
Index: src/main/java/org/apache/maven/plugins/shade/resource/ServicesResourceTransformer.java
===================================================================
--- src/main/java/org/apache/maven/plugins/shade/resource/ServicesResourceTransformer.java (revision 1762668)
+++ src/main/java/org/apache/maven/plugins/shade/resource/ServicesResourceTransformer.java (working copy)
@@ -86,7 +86,10 @@
String relContent = line;
for ( Relocator relocator : relocators )
{
- relContent = relocator.applyToSourceContent( relContent );
+ if ( relocator.canRelocateClass(relContent) )
+ {
+ relContent = relocator.relocateClass(relContent);
+ }
}
fout.append( relContent + "\n" );
}
Index: src/test/java/org/apache/maven/plugins/shade/resource/ServiceResourceTransformerTest.java
===================================================================
--- src/test/java/org/apache/maven/plugins/shade/resource/ServiceResourceTransformerTest.java (revision 1762668)
+++ src/test/java/org/apache/maven/plugins/shade/resource/ServiceResourceTransformerTest.java (working copy)
@@ -27,6 +27,7 @@
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
+import java.util.Collections;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
@@ -46,10 +47,11 @@
@Test
public void relocatedClasses() throws Exception {
- SimpleRelocator relocator = new SimpleRelocator("org.foo", "borg.foo", null, null);
+ SimpleRelocator relocator = new SimpleRelocator("org.foo", "borg.foo", null,
+ Collections.singletonList("org.foo.exclude.**"));
List<Relocator> relocators = Lists.<Relocator>newArrayList( relocator );
- String content = "org.foo.Service\n";
+ String content = "org.foo.Service\norg.foo.exclude.OtherService\n";
byte[] contentBytes = content.getBytes( "UTF-8" );
InputStream contentStream = new ByteArrayInputStream( contentBytes );
String contentResource = "META-INF/services/org.foo.something.another";
@@ -73,7 +75,8 @@
InputStream entryStream = jarFile.getInputStream( jarEntry );
try {
String xformedContent = IOUtils.toString(entryStream, "utf-8");
- assertEquals("borg.foo.Service" + System.getProperty( "line.separator" ), xformedContent);
+ assertEquals("borg.foo.Service" + System.getProperty( "line.separator" )
+ + "org.foo.exclude.OtherService" + System.getProperty( "line.separator" ), xformedContent);
} finally {
IOUtils.closeQuietly( entryStream );
jarFile.close();