Author: bimargulies
Date: Sat May 26 22:05:45 2012
New Revision: 1342979

URL: http://svn.apache.org/viewvc?rev=1342979&view=rev
Log:
MSHADE-119: slash-leading classpath resources not properly rewritten when 
repackaging classes
o treat "/a/b/c" as the same thing as "a/b/c" in deciding if a path is 
relocatable. 

Added:
    maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/
      - copied from r1342941, 
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-class-from-string-pool/
    
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/resources/
    
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/resources/org/
    
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/resources/org/apache/
    
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/resources/org/apache/maven/
    
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/resources/org/apache/maven/from/
    
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/resources/org/apache/maven/from/test.properties
   (with props)
Removed:
    
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/java/relocated/
Modified:
    
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/pom.xml
    
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/java/Main.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/it/reloc-abs-resource-path/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/pom.xml?rev=1342979&r1=1342941&r2=1342979&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/pom.xml 
(original)
+++ 
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/pom.xml 
Sat May 26 22:05:45 2012
@@ -22,35 +22,26 @@ 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";>
   <modelVersion>4.0.0</modelVersion>
 
-  <groupId>org.apache.maven.its.shade.rcfsp</groupId>
-  <artifactId>test</artifactId>
+  <groupId>org.apache.maven.its.shade</groupId>
+  <artifactId>reloc-abs-resource-path</artifactId>
   <version>1.0</version>
-  <packaging>jar</packaging>
 
-  <name>MSHADE-47</name>
+  <parent>
+    <groupId>org.apache.maven</groupId>
+    <artifactId>maven-parent</artifactId>
+    <version>21</version>
+  </parent>
+
+  <name>MSHADE-119</name>
   <description>
-    Test that classes in strings like "[Lnet/sf/cglib/proxy/Callback" get 
properly relocated.
+    Test that classes in strings like "/org/apache/velocity/my.properties" get 
properly relocated
+    in calls to Class.getResource().
   </description>
 
   <build>
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>2.0.2</version>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <version>2.1</version>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-resources-plugin</artifactId>
-        <version>2.2</version>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-shade-plugin</artifactId>
         <version>@project.version@</version>
         <executions>
@@ -64,8 +55,8 @@ under the License.
               <createDependencyReducedPom>false</createDependencyReducedPom>
               <relocations>
                 <relocation>
-                  <pattern>relocated</pattern>
-                  <shadedPattern>hidden</shadedPattern>
+                  <pattern>org.apache.maven.from</pattern>
+                  <shadedPattern>org.apache.maven.to</shadedPattern>
                 </relocation>
               </relocations>
             </configuration>
@@ -87,18 +78,13 @@ under the License.
               <executable>java</executable>
               <arguments>
                 <argument>-classpath</argument>
-                <argument>${project.build.directory}/test-1.0.jar</argument>
+                
<argument>${project.build.directory}/reloc-abs-resource-path-1.0.jar</argument>
                 <argument>Main</argument>
               </arguments>
             </configuration>
           </execution>
         </executions>
       </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <version>2.3.1</version>
-      </plugin>
     </plugins>
   </build>
 </project>

Modified: 
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/java/Main.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/java/Main.java?rev=1342979&r1=1342941&r2=1342979&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/java/Main.java
 (original)
+++ 
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/java/Main.java
 Sat May 26 22:05:45 2012
@@ -1,3 +1,5 @@
+import java.net.URL;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -23,50 +25,15 @@ public class Main
     public static void main( String[] args )
         throws Exception
     {
-        testClassWithSlashes();
-        testClassWithDots();
-        testArrayClassWithDots();
-        testArrayClassWithDots();
-    }
-
-    private static void testClassWithSlashes()
-        throws Exception
-    {
-        String typeName = "Lrelocated/RelocatedClass;";
-        typeName = typeName.substring( 1, typeName.length() - 1 );
-        typeName = typeName.replace( '/', '.' );
-        Class type = Class.forName( typeName );
-        System.out.println( type.getName() );
-    }
-
-    private static void testClassWithDots()
-        throws Exception
-    {
-        String typeName = "Lrelocated.RelocatedClass;";
-        typeName = typeName.substring( 1, typeName.length() - 1 );
-        typeName = typeName.replace( '/', '.' );
-        Class type = Class.forName( typeName );
-        System.out.println( type.getName() );
+        new Main().testAbsResource();
+       
     }
 
-    private static void testArrayClassWithSlashes()
-        throws Exception
-    {
-        String typeName = "[[[Lrelocated/RelocatedClass;";
-        typeName = typeName.substring( 4, typeName.length() - 1 );
-        typeName = typeName.replace( '/', '.' );
-        Class type = Class.forName( typeName );
-        System.out.println( type.getName() );
-    }
-
-    private static void testArrayClassWithDots()
-        throws Exception
+    private void testAbsResource() throws Exception
     {
-        String typeName = "[[[[Lrelocated.RelocatedClass;";
-        typeName = typeName.substring( 5, typeName.length() - 1 );
-        typeName = typeName.replace( '/', '.' );
-        Class type = Class.forName( typeName );
-        System.out.println( type.getName() );
+        URL r = 
getClass().getResource("/org/apache/maven/from/test.properties");
+        // expect NPE if MSHADE-119 is not fixed.
+        System.out.println( r.toString() );
     }
 
 }

Added: 
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/resources/org/apache/maven/from/test.properties
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/resources/org/apache/maven/from/test.properties?rev=1342979&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/resources/org/apache/maven/from/test.properties
 (added)
+++ 
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/resources/org/apache/maven/from/test.properties
 Sat May 26 22:05:45 2012
@@ -0,0 +1 @@
+testprop=proptest

Propchange: 
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/resources/org/apache/maven/from/test.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/trunk/maven-shade-plugin/src/it/reloc-abs-resource-path/src/main/resources/org/apache/maven/from/test.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=1342979&r1=1342978&r2=1342979&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
 Sat May 26 22:05:45 2012
@@ -505,7 +505,7 @@ public class ShadeMojo
 
                 // rename the output file if a specific finalName is set
                 // but don't rename if the finalName is the <build><finalName>
-                // because this will be handled implicitely later
+                // because this will be handled implicitly later
                 if ( finalName != null && finalName.length() > 0 && 
!finalName.equals(
                     project.getBuild().getFinalName() ) )
                 {

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=1342979&r1=1342978&r2=1342979&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
 Sat May 26 22:05:45 2012
@@ -170,7 +170,8 @@ public class SimpleRelocator
             return false;
         }
 
-        return path.startsWith( pathPattern );
+        // Allow for annoying option of an extra / on the front of a path. See 
MSHADE-119; comes from getClass().getResource("/a/b/c.properties").
+        return path.startsWith( pathPattern ) || path.startsWith ( "/" + 
pathPattern );
     }
 
     public boolean canRelocateClass( 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=1342979&r1=1342978&r2=1342979&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
 Sat May 26 22:05:45 2012
@@ -76,10 +76,18 @@ public class SimpleRelocatorTest
 
         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" 
) );
     }
+    
+    //MSHADE-119, make sure that the easy part of this works.
+    public void testCanRelocateAbsClassPath() 
+    {
+        SimpleRelocator relocator = new SimpleRelocator( 
"org.apache.velocity", "org.apache.momentum", null, null );
+        assertEquals("/org/apache/momentum/mass.properties", 
relocator.relocatePath( "/org/apache/velocity/mass.properties" ) );
+        
+    }
 
     public void testRelocatePath()
     {


Reply via email to