You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by bi...@apache.org on 2011/11/20 23:17:34 UTC

svn commit: r1204282 - in /maven/plugins/trunk/maven-shade-plugin/src: main/java/org/apache/maven/plugins/shade/mojo/ main/java/org/apache/maven/plugins/shade/relocation/ test/java/org/apache/maven/plugins/shade/relocation/

Author: bimargulies
Date: Sun Nov 20 22:17:34 2011
New Revision: 1204282

URL: http://svn.apache.org/viewvc?rev=1204282&view=rev
Log:
MSHADE-104: Cannot shade aspectj library
o allow for relocating 'raw' (non-mangled-class-name) strings.
o fix regex internal confusion.

Modified:
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/PackageRelocation.java
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.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/relocation/SimpleRelocatorTest.java

Modified: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/PackageRelocation.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/PackageRelocation.java?rev=1204282&r1=1204281&r2=1204282&view=diff
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/PackageRelocation.java (original)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/PackageRelocation.java Sun Nov 20 22:17:34 2011
@@ -34,6 +34,8 @@ public class PackageRelocation
     private List includes;
 
     private List excludes;
+    
+    private boolean rawString;
 
     public String getPattern()
     {
@@ -54,4 +56,9 @@ public class PackageRelocation
     {
         return excludes;
     }
+    
+    public boolean isRawString()
+    {
+        return rawString;
+    }
 }

Modified: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java?rev=1204282&r1=1204281&r2=1204282&view=diff
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java (original)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java Sun Nov 20 22:17:34 2011
@@ -613,7 +613,7 @@ public class ShadeMojo
         {
             PackageRelocation r = relocations[i];
 
-            relocators.add( new SimpleRelocator( r.getPattern(), r.getShadedPattern(), r.getIncludes(), r.getExcludes() ) );
+            relocators.add( new SimpleRelocator( r.getPattern(), r.getShadedPattern(), r.getIncludes(), r.getExcludes(), r.isRawString() ) );
         }
 
         return relocators;

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=1204282&r1=1204281&r2=1204282&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 Sun Nov 20 22:17:34 2011
@@ -24,6 +24,7 @@ import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.regex.Pattern;
 
 import org.codehaus.plexus.util.SelectorUtils;
 
@@ -46,21 +47,41 @@ public class SimpleRelocator
     private final Set includes;
 
     private final Set excludes;
+    
+    private final boolean rawString;
 
     public SimpleRelocator( String patt, String shadedPattern, List includes, List excludes )
     {
-        this.pattern = patt.replace( '/', '.' );
-        this.pathPattern = patt.replace( '.', '/' );
-
-        if ( shadedPattern != null )
+        this( patt, shadedPattern, includes, excludes, false );
+    }
+    
+    public SimpleRelocator( String patt, String shadedPattern, List includes, List excludes, boolean rawString )
+    {
+        this.rawString = rawString;
+        
+        if ( rawString )
         {
-            this.shadedPattern = shadedPattern.replace( '/', '.' );
-            this.shadedPathPattern = shadedPattern.replace( '.', '/' );
+            this.pathPattern = patt;
+            this.shadedPathPattern = shadedPattern;
+
+            this.pattern = null; // not used for raw string relocator
+            this.shadedPattern = null; // not used for raw string relocator
         }
         else
         {
-            this.shadedPattern = "hidden." + this.pattern;
-            this.shadedPathPattern = "hidden/" + this.pathPattern;
+            this.pattern = patt.replace( '/', '.' );
+            this.pathPattern = patt.replace( '.', '/' );
+
+            if ( shadedPattern != null )
+            {
+                this.shadedPattern = shadedPattern.replace( '/', '.' );
+                this.shadedPathPattern = shadedPattern.replace( '.', '/' );
+            }
+            else
+            {
+                this.shadedPattern = "hidden." + this.pattern;
+                this.shadedPathPattern = "hidden/" + this.pathPattern;
+            }
         }
 
         this.includes = normalizePatterns( includes );
@@ -131,6 +152,11 @@ public class SimpleRelocator
 
     public boolean canRelocatePath( String path )
     {
+        if ( rawString )
+        {
+            return Pattern.compile( pathPattern ).matcher( path ).find();
+        }
+        
         if ( path.endsWith( ".class" ) )
         {
             path = path.substring( 0, path.length() - 6 );
@@ -146,12 +172,19 @@ public class SimpleRelocator
 
     public boolean canRelocateClass( String clazz )
     {
-        return clazz.indexOf( '/' ) < 0 && canRelocatePath( clazz.replace( '.', '/' ) );
+        return !rawString && clazz.indexOf( '/' ) < 0 && canRelocatePath( clazz.replace( '.', '/' ) );
     }
 
     public String relocatePath( String path )
     {
-        return path.replaceFirst( pathPattern, shadedPathPattern );
+        if ( rawString )
+        {
+            return path.replaceAll( pathPattern, shadedPathPattern );
+        }
+        else
+        {
+            return path.replaceFirst( pathPattern, shadedPathPattern );
+        }
     }
 
     public String relocateClass( String clazz )

Modified: maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/relocation/SimpleRelocatorTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/relocation/SimpleRelocatorTest.java?rev=1204282&r1=1204281&r2=1204282&view=diff
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/relocation/SimpleRelocatorTest.java (original)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/relocation/SimpleRelocatorTest.java Sun Nov 20 22:17:34 2011
@@ -71,6 +71,17 @@ public class SimpleRelocatorTest
         assertEquals( false, relocator.canRelocateClass( "org.foo.PublicStuff" ) );
         assertEquals( false, relocator.canRelocateClass( "org.foo.PublicUtilStuff" ) );
     }
+    
+    public void testCanRelocateRawString()
+    {
+        SimpleRelocator relocator;
+
+        relocator = new SimpleRelocator( "org/foo", null, null, null, true );
+        assertEquals( true, relocator.canRelocatePath( "(I)org/foo/bar/Class;" ) );
+
+        relocator = new SimpleRelocator( "^META-INF/org.foo.xml$", null, null, null, true );
+        assertEquals( true, relocator.canRelocatePath( "META-INF/org.foo.xml" ) );
+    }
 
     public void testRelocatePath()
     {
@@ -94,4 +105,14 @@ public class SimpleRelocatorTest
         assertEquals( "private.stuff.bar.Class", relocator.relocateClass( "org.foo.bar.Class" ) );
     }
 
+    public void testRelocateRawString()
+    {
+        SimpleRelocator relocator;
+
+        relocator = new SimpleRelocator( "Lorg/foo", "Lhidden/org/foo", null, null, true );
+        assertEquals( "(I)Lhidden/org/foo/bar/Class;", relocator.relocatePath( "(I)Lorg/foo/bar/Class;" ) );
+
+        relocator = new SimpleRelocator( "^META-INF/org.foo.xml$", "META-INF/hidden.org.foo.xml", null, null, true );
+        assertEquals( "META-INF/hidden.org.foo.xml", relocator.relocatePath( "META-INF/org.foo.xml" ) );
+    }
 }