You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2014/04/25 20:23:42 UTC
svn commit: r1590093 - in /maven/plugins/trunk/maven-shade-plugin/src:
main/java/org/apache/maven/plugins/shade/DefaultShader.java
test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
Author: jdcasey
Date: Fri Apr 25 18:23:42 2014
New Revision: 1590093
URL: http://svn.apache.org/r1590093
Log:
[MSHADE-167] Applying supplied patch, with small modifications to adjust to ASM 5 API
Modified:
maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
Modified: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java?rev=1590093&r1=1590092&r2=1590093&view=diff
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java (original)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java Fri Apr 25 18:23:42 2014
@@ -21,9 +21,11 @@ package org.apache.maven.plugins.shade;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.shade.filter.Filter;
+
import com.google.common.base.Joiner;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
+
import org.apache.maven.plugins.shade.relocation.Relocator;
import org.apache.maven.plugins.shade.resource.ManifestResourceTransformer;
import org.apache.maven.plugins.shade.resource.ResourceTransformer;
@@ -335,7 +337,20 @@ public class DefaultShader
// that use the constant pool to determine the dependencies of a class.
ClassWriter cw = new ClassWriter( 0 );
- ClassVisitor cv = new RemappingClassAdapter( cw, remapper );
+ final String pkg = name.substring(0, name.lastIndexOf('/') + 1);
+ ClassVisitor cv = new RemappingClassAdapter( cw, remapper ) {
+ @Override
+ public void visitSource(final String source, final String debug) {
+ if (source == null) {
+ super.visitSource(source, debug);
+ } else {
+ final String fqSource = pkg + source;
+ final String mappedSource = remapper.map(fqSource);
+ final String filename = mappedSource.substring(mappedSource.lastIndexOf('/') + 1);
+ super.visitSource(filename, debug);
+ }
+ }
+ };
try
{
Modified: maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java?rev=1590093&r1=1590092&r2=1590093&view=diff
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java (original)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java Fri Apr 25 18:23:42 2014
@@ -37,6 +37,12 @@ import org.apache.maven.plugins.shade.re
import org.apache.maven.plugins.shade.resource.ResourceTransformer;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.logging.console.ConsoleLogger;
+import org.objectweb.asm.Attribute;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
/**
* @author Jason van Zyl
@@ -102,7 +108,58 @@ public class DefaultShaderTest
shaderWithPattern( "org/shaded/plexus/util", new File( "target/foo-custom-without-excludes.jar" ), new String[] {} );
}
- public void shaderWithPattern( String shadedPattern, File jar, String[] excludes )
+ public void testShaderWithRelocatedClassname()
+ throws Exception
+ {
+ DefaultShader s = newShader();
+
+ Set<File> set = new LinkedHashSet<File>();
+
+ set.add( new File( "src/test/jars/test-project-1.0-SNAPSHOT.jar" ) );
+
+ set.add( new File( "src/test/jars/plexus-utils-1.4.1.jar" ) );
+
+ List<Relocator> relocators = new ArrayList<Relocator>();
+
+ relocators.add( new SimpleRelocator( "org/codehaus/plexus/util/", "_plexus/util/__", null, Arrays.<String> asList() ) );
+
+ List<ResourceTransformer> resourceTransformers = new ArrayList<ResourceTransformer>();
+
+ resourceTransformers.add( new ComponentsXmlResourceTransformer() );
+
+ List<Filter> filters = new ArrayList<Filter>();
+
+ File file = new File( "target/foo-relocate-class.jar" );
+
+ ShadeRequest shadeRequest = new ShadeRequest();
+ shadeRequest.setJars( set );
+ shadeRequest.setUberJar( file );
+ shadeRequest.setFilters( filters );
+ shadeRequest.setRelocators( relocators );
+ shadeRequest.setResourceTransformers( resourceTransformers );
+
+ s.shade( shadeRequest );
+
+ URLClassLoader cl = new URLClassLoader( new URL[]{file.toURI().toURL()} );
+ Class<?> c = cl.loadClass( "_plexus.util.__StringUtils" );
+ // first, ensure it works:
+ Object o = c.newInstance();
+ assertEquals("", c.getMethod("clean", String.class).invoke(o, (String) null));
+
+ // now, check that its source file was rewritten:
+ final String[] source = { null };
+ final ClassReader classReader = new ClassReader(cl.getResourceAsStream("_plexus/util/__StringUtils.class"));
+ classReader.accept(new ClassVisitor( Opcodes.ASM4 ) {
+ @Override
+ public void visitSource(String arg0, String arg1) {
+ super.visitSource(arg0, arg1);
+ source[0] = arg0;
+ }
+ }, ClassReader.SKIP_CODE);
+ assertEquals("__StringUtils.java", source[0]);
+ }
+
+ private void shaderWithPattern( String shadedPattern, File jar, String[] excludes )
throws Exception
{
DefaultShader s = newShader();