You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2008/02/29 06:16:17 UTC

svn commit: r632225 - in /maven/plugins/trunk/maven-shade-plugin: ./ src/main/java/org/apache/maven/plugins/shade/ src/main/java/org/apache/maven/plugins/shade/relocation/ src/test/jars/ src/test/java/org/apache/maven/plugins/shade/ src/test/projects/ ...

Author: brett
Date: Thu Feb 28 21:16:07 2008
New Revision: 632225

URL: http://svn.apache.org/viewvc?rev=632225&view=rev
Log:
[MSHADE-19] relocate classes that appear inside static references

Added:
    maven/plugins/trunk/maven-shade-plugin/src/test/jars/test-artifact-1.0-SNAPSHOT.jar   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/pom.xml   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/java/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/java/org/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/java/org/apache/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/java/org/apache/maven/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/java/org/apache/maven/plugins/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/java/org/apache/maven/plugins/shade/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/java/org/apache/maven/plugins/shade/Lib.java   (with props)
Modified:
    maven/plugins/trunk/maven-shade-plugin/   (props changed)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/relocation/Relocator.java
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java
    maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/pom.xml
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/pom.xml

Propchange: maven/plugins/trunk/maven-shade-plugin/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Feb 28 21:16:07 2008
@@ -2,3 +2,6 @@
 .project
 target
 .settings
+*.iml
+*.ipr
+*.iws

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=632225&r1=632224&r2=632225&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 Thu Feb 28 21:16:07 2008
@@ -274,22 +274,47 @@
 
         public Object mapValue( Object object )
         {
+            if ( object instanceof String )
+            {
+                String name = (String) object;
+                String value = name;
+                for ( Iterator i = relocators.iterator(); i.hasNext(); )
+                {
+                    Relocator r = (Relocator) i.next();
+
+                    if ( r.canRelocatePath( name ) )
+                    {
+                        value = r.relocatePath( name );
+                        break;
+                    }
+
+                    if ( r.canRelocateClass( name ) )
+                    {
+                        value = r.relocateClass( name );
+                        break;
+                    }
+                }
+
+                return value;
+            }
             return object;
         }
 
         public String map( String name )
         {
+            String value = name;
             for ( Iterator i = relocators.iterator(); i.hasNext(); )
             {
                 Relocator r = (Relocator) i.next();
 
-                if ( r.canRelocate( name ) )
+                if ( r.canRelocatePath( name ) )
                 {
-                    return r.relocate( name );
+                    value = r.relocatePath( name );
+                    break;
                 }
             }
 
-            return name;
+            return value;
         }
     }
 }

Modified: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/relocation/Relocator.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/relocation/Relocator.java?rev=632225&r1=632224&r2=632225&view=diff
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/relocation/Relocator.java (original)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/relocation/Relocator.java Thu Feb 28 21:16:07 2008
@@ -24,7 +24,11 @@
 {
     String ROLE = Relocator.class.getName();
 
-    boolean canRelocate( String clazz );
+    boolean canRelocatePath( String clazz );
 
-    String relocate( String clazz );
+    String relocatePath( String clazz );
+
+    boolean canRelocateClass( String clazz );
+
+    String relocateClass( String clazz );
 }

Modified: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java?rev=632225&r1=632224&r2=632225&view=diff
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java (original)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java Thu Feb 28 21:16:07 2008
@@ -32,20 +32,27 @@
 {
     private String pattern;
 
+    private String pathPattern;
+
     private String shadedPattern;
 
+    private String shadedPathPattern;
+
     private List excludes;
 
     public SimpleRelocator(String patt, String shadedPattern, List excludes)
     {
-        this.pattern = patt.replace('.', '/');
+        this.pattern = patt;
+        this.pathPattern = patt.replace('.', '/');
 
         if ( shadedPattern != null )
         {
-            this.shadedPattern = shadedPattern.replace('.', '/');
+            this.shadedPattern = shadedPattern;
+            this.shadedPathPattern = shadedPattern.replace('.', '/');
         } else
         {
-            this.shadedPattern = "hidden/" + this.pattern;
+            this.shadedPattern = "hidden." + this.pattern;
+            this.shadedPathPattern = "hidden/" + this.pathPattern;
         }
 
         if (excludes != null)
@@ -61,7 +68,7 @@
         }
     }
 
-    public boolean canRelocate( String clazz )
+    public boolean canRelocatePath( String clazz )
     {
         if ( excludes != null )
         {
@@ -81,12 +88,39 @@
             }
         }
 
+        return clazz.startsWith( pathPattern );
+    }
+
+    public boolean canRelocateClass( String clazz )
+    {
+        if ( excludes != null )
+        {
+            for ( Iterator i = excludes.iterator(); i.hasNext(); )
+            {
+                String exclude = (String) i.next();
+
+                exclude = exclude.replace( '/', '.' );
+                if ( exclude.endsWith( ".*" ) && clazz.startsWith( exclude.substring( 0, exclude.length() - 2 ) ) )
+                {
+                    return false;
+                }
+                else if ( clazz.equals( exclude ) )
+                {
+                    return false;
+                }
+            }
+        }
+
         return clazz.startsWith( pattern );
     }
 
-    public String relocate( String clazz )
+    public String relocatePath( String clazz )
     {
-        return clazz.replaceFirst(pattern, shadedPattern);
+        return clazz.replaceFirst(pathPattern, shadedPathPattern);
     }
 
+    public String relocateClass( String clazz )
+    {
+        return clazz.replaceFirst(pattern, shadedPattern);
+    }
 }

Added: maven/plugins/trunk/maven-shade-plugin/src/test/jars/test-artifact-1.0-SNAPSHOT.jar
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/jars/test-artifact-1.0-SNAPSHOT.jar?rev=632225&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/jars/test-artifact-1.0-SNAPSHOT.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

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=632225&r1=632224&r2=632225&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 Thu Feb 28 21:16:07 2008
@@ -25,6 +25,8 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.net.URLClassLoader;
+import java.net.URL;
 
 import junit.framework.TestCase;
 
@@ -46,6 +48,32 @@
         throws Exception
     {
         shaderWithPattern( null, new File( "target/foo-default.jar" ), EXCLUDES );
+    }
+
+    public void testShaderWithStaticInitializedClass()
+        throws Exception
+    {
+        Shader s = new DefaultShader();
+
+        Set set = new HashSet();
+
+        set.add( new File( "src/test/jars/test-artifact-1.0-SNAPSHOT.jar" ) );
+
+        List relocators = new ArrayList();
+
+        relocators.add( new SimpleRelocator( "org.apache.maven.plugins.shade", null, null ) );
+
+        List resourceTransformers = new ArrayList();
+
+        List filters = new ArrayList();
+
+        File file = new File( "target/testShaderWithStaticInitializedClass.jar" );
+        s.shade( set, file, filters, relocators, resourceTransformers );
+
+        URLClassLoader cl = new URLClassLoader( new URL[]{file.toURL()} );
+        Class c = cl.loadClass( "hidden.org.apache.maven.plugins.shade.Lib" );
+        Object o = c.newInstance();
+        assertEquals( "foo.bar/baz", c.getDeclaredField( "CONSTANT" ).get( o ) );
     }
 
     public void testShaderWithCustomShadedPattern()

Modified: maven/plugins/trunk/maven-shade-plugin/src/test/projects/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/pom.xml?rev=632225&r1=632224&r2=632225&view=diff
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/pom.xml (original)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/pom.xml Thu Feb 28 21:16:07 2008
@@ -16,10 +16,7 @@
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.maven.plugins.shade</groupId>
   <artifactId>projects-parent</artifactId>
@@ -33,5 +30,6 @@
     <module>shaded-project</module>
     <module>shaded-renamed-project</module>
     <module>shaded-attached-project</module>
+    <module>test-artifact</module>
   </modules>
-</project>
+</project>
\ No newline at end of file

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Feb 28 21:16:07 2008
@@ -0,0 +1 @@
+target

Added: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/pom.xml?rev=632225&view=auto
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/pom.xml (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/pom.xml Thu Feb 28 21:16:07 2008
@@ -0,0 +1,21 @@
+<?xml version="1.0"?><project>
+  <parent>
+    <artifactId>projects-parent</artifactId>
+    <groupId>org.apache.maven.plugins.shade</groupId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugins.shade</groupId>
+  <artifactId>test-artifact</artifactId>
+  <name>test-artifact</name>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/java/org/apache/maven/plugins/shade/Lib.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/java/org/apache/maven/plugins/shade/Lib.java?rev=632225&view=auto
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/java/org/apache/maven/plugins/shade/Lib.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/java/org/apache/maven/plugins/shade/Lib.java Thu Feb 28 21:16:07 2008
@@ -0,0 +1,13 @@
+package org.apache.maven.plugins.shade;
+
+/**
+ * Hello world!
+ *
+ */
+public class Lib
+{
+    // simulate the type of call for static loggers that currently fails
+    private static final String name = new String( Lib.class.getName() );
+
+    public static final String CONSTANT = "foo.bar/baz";
+}

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-artifact/src/main/java/org/apache/maven/plugins/shade/Lib.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/pom.xml?rev=632225&r1=632224&r2=632225&view=diff
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/pom.xml (original)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/pom.xml Thu Feb 28 21:16:07 2008
@@ -29,6 +29,11 @@
   <url>http://maven.apache.org</url>
   <dependencies>
     <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>test-artifact</artifactId>
+      <version>${project.version}</version>
+    </dependency>  
+    <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
       <version>1.4.1</version>