You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2010/08/07 17:16:51 UTC

svn commit: r983242 - in /maven/plugins/trunk/maven-shade-plugin/src: it/reloc-includes-excludes/ main/java/org/apache/maven/plugins/shade/mojo/ main/java/org/apache/maven/plugins/shade/relocation/ test/java/org/apache/maven/plugins/shade/ test/java/or...

Author: bentmann
Date: Sat Aug  7 15:16:48 2010
New Revision: 983242

URL: http://svn.apache.org/viewvc?rev=983242&view=rev
Log:
[MSHADE-74] Includes as well as Excludes in PackageRelocation

Added:
    maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/
    maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/pom.xml   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/verify.bsh   (with props)
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/DefaultShaderTest.java
    maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
    maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/relocation/SimpleRelocatorTest.java

Added: maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/pom.xml?rev=983242&view=auto
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/pom.xml (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/pom.xml Sat Aug  7 15:16:48 2010
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its.shade.rie</groupId>
+  <artifactId>test</artifactId>
+  <version>1.0</version>
+  <packaging>jar</packaging>
+
+  <name>MSHADE-74</name>
+  <description>
+    Test handling of inclusions/exclusions for relocations.
+  </description>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.2</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+        <version>@project.version@</version>
+        <executions>
+          <execution>
+            <id>attach-shade</id>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <shadedArtifactAttached>false</shadedArtifactAttached>
+              <relocations>
+                <relocation>
+                  <pattern>junit.textui</pattern>
+                  <shadedPattern>a</shadedPattern>
+                  <excludes>
+                    <exclude>junit.textui.TestRunner</exclude>
+                  </excludes>
+                </relocation>
+                <relocation>
+                  <pattern>junit.framework</pattern>
+                  <shadedPattern>b</shadedPattern>
+                  <includes>
+                    <include>junit.framework.Test*</include>
+                  </includes>
+                </relocation>
+              </relocations>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/verify.bsh
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/verify.bsh?rev=983242&view=auto
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/verify.bsh (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/verify.bsh Sat Aug  7 15:16:48 2010
@@ -0,0 +1,38 @@
+import java.io.*;
+import java.util.jar.*;
+
+String[] wanted =
+{
+    "a/ResultPrinter.class",
+    "junit/textui/TestRunner.class",
+    "b/Test.class",
+    "b/TestCase.class",
+    "junit/framework/Assert.class",
+};
+
+String[] unwanted =
+{
+    "junit/textui/ResultPrinter.class",
+    "junit/framework/Test.class",
+    "junit/framework/TestCase.class",
+};
+
+JarFile jarFile = new JarFile( new File( basedir, "target/test-1.0.jar" ) );
+
+for ( String path : wanted )
+{
+    if ( jarFile.getEntry( path ) == null )
+    {
+        throw new IllegalStateException( "wanted path is missing: " + path );
+    }
+}
+
+for ( String path : unwanted )
+{
+    if ( jarFile.getEntry( path ) != null )
+    {
+        throw new IllegalStateException( "unwanted path is present: " + path );
+    }
+}
+
+jarFile.close();

Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/verify.bsh
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/reloc-includes-excludes/verify.bsh
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

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=983242&r1=983241&r2=983242&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 Sat Aug  7 15:16:48 2010
@@ -31,6 +31,8 @@ public class PackageRelocation
 
     private String shadedPattern;
 
+    private List includes;
+
     private List excludes;
 
     public String getPattern()
@@ -43,6 +45,11 @@ public class PackageRelocation
         return shadedPattern;
     }
 
+    public List getIncludes()
+    {
+        return includes;
+    }
+
     public List getExcludes()
     {
         return excludes;

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=983242&r1=983241&r2=983242&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 Aug  7 15:16:48 2010
@@ -202,13 +202,17 @@ public class ShadeMojo
      *   &lt;relocation&gt;
      *     &lt;pattern&gt;org.apache&lt;/pattern&gt;
      *     &lt;shadedPattern&gt;hidden.org.apache&lt;/shadedPattern&gt;
+     *     &lt;includes&gt;
+     *       &lt;include&gt;org.apache.maven.*&lt;/include&gt;
+     *     &lt;/includes&gt;
      *     &lt;excludes&gt;
-     *       &lt;exclude&gt;org.apache.ExcludedClass&lt;/exclude&gt;
+     *       &lt;exclude&gt;org.apache.maven.Public*&lt;/exclude&gt;
      *     &lt;/excludes&gt;
      *   &lt;/relocation&gt;
      * &lt;/relocations&gt;
      * </pre>
-     *
+     * <em>Note:</em> Support for includes exists only since version 1.4.
+     * 
      * @parameter
      */
     private PackageRelocation[] relocations;
@@ -609,7 +613,7 @@ public class ShadeMojo
         {
             PackageRelocation r = relocations[i];
 
-            relocators.add( new SimpleRelocator( r.getPattern(), r.getShadedPattern(), r.getExcludes() ) );
+            relocators.add( new SimpleRelocator( r.getPattern(), r.getShadedPattern(), r.getIncludes(), r.getExcludes() ) );
         }
 
         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=983242&r1=983241&r2=983242&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 Aug  7 15:16:48 2010
@@ -19,6 +19,7 @@ package org.apache.maven.plugins.shade.r
  * under the License.
  */
 
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -33,17 +34,20 @@ import org.codehaus.plexus.util.Selector
 public class SimpleRelocator
     implements Relocator
 {
-    private String pattern;
 
-    private String pathPattern;
+    private final String pattern;
 
-    private String shadedPattern;
+    private final String pathPattern;
 
-    private String shadedPathPattern;
+    private final String shadedPattern;
 
-    private Set excludes;
+    private final String shadedPathPattern;
 
-    public SimpleRelocator( String patt, String shadedPattern, List excludes )
+    private final Set includes;
+
+    private final Set excludes;
+
+    public SimpleRelocator( String patt, String shadedPattern, List includes, List excludes )
     {
         this.pattern = patt.replace( '/', '.' );
         this.pathPattern = patt.replace( '.', '/' );
@@ -59,33 +63,58 @@ public class SimpleRelocator
             this.shadedPathPattern = "hidden/" + this.pathPattern;
         }
 
-        if ( excludes != null && !excludes.isEmpty() )
+        this.includes = normalizePatterns( includes );
+        this.excludes = normalizePatterns( excludes );
+    }
+
+    private static Set normalizePatterns( Collection patterns )
+    {
+        Set normalized = null;
+
+        if ( patterns != null && !patterns.isEmpty() )
         {
-            this.excludes = new LinkedHashSet();
+            normalized = new LinkedHashSet();
 
-            for ( Iterator i = excludes.iterator(); i.hasNext(); )
+            for ( Iterator i = patterns.iterator(); i.hasNext(); )
             {
-                String e = (String) i.next();
+                String pattern = (String) i.next();
+
+                String classPattern = pattern.replace( '.', '/' );
 
-                String classExclude = e.replace( '.', '/' );
-                this.excludes.add( classExclude );
+                normalized.add( classPattern );
 
-                if ( classExclude.endsWith( "/*" ) )
+                if ( classPattern.endsWith( "/*" ) )
                 {
-                    String packageExclude = classExclude.substring( 0, classExclude.lastIndexOf( '/' ) );
-                    this.excludes.add( packageExclude );
+                    String packagePattern = classPattern.substring( 0, classPattern.lastIndexOf( '/' ) );
+                    normalized.add( packagePattern );
                 }
             }
         }
+
+        return normalized;
     }
 
-    public boolean canRelocatePath( String path )
+    private boolean isIncluded( String path )
     {
-        if ( path.endsWith( ".class" ) )
+        if ( includes != null && !includes.isEmpty() )
         {
-            path = path.substring( 0, path.length() - 6 );
+            for ( Iterator i = includes.iterator(); i.hasNext(); )
+            {
+                String include = (String) i.next();
+
+                if ( SelectorUtils.matchPath( include, path, true ) )
+                {
+                    return true;
+                }
+            }
+            return false;
         }
-        if ( excludes != null )
+        return true;
+    }
+
+    private boolean isExcluded( String path )
+    {
+        if ( excludes != null && !excludes.isEmpty() )
         {
             for ( Iterator i = excludes.iterator(); i.hasNext(); )
             {
@@ -93,10 +122,24 @@ public class SimpleRelocator
 
                 if ( SelectorUtils.matchPath( exclude, path, true ) )
                 {
-                    return false;
+                    return true;
                 }
             }
         }
+        return false;
+    }
+
+    public boolean canRelocatePath( String path )
+    {
+        if ( path.endsWith( ".class" ) )
+        {
+            path = path.substring( 0, path.length() - 6 );
+        }
+
+        if ( !isIncluded( path ) || isExcluded( path ) )
+        {
+            return false;
+        }
 
         return path.startsWith( pathPattern );
     }

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=983242&r1=983241&r2=983242&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 Sat Aug  7 15:16:48 2010
@@ -63,7 +63,7 @@ public class DefaultShaderTest
 
         List relocators = new ArrayList();
 
-        relocators.add( new SimpleRelocator( "org.apache.maven.plugins.shade", null, null ) );
+        relocators.add( new SimpleRelocator( "org.apache.maven.plugins.shade", null, null, null ) );
 
         List resourceTransformers = new ArrayList();
 
@@ -104,7 +104,7 @@ public class DefaultShaderTest
 
         List relocators = new ArrayList();
 
-        relocators.add( new SimpleRelocator( "org/codehaus/plexus/util", shadedPattern, Arrays.asList( excludes ) ) );
+        relocators.add( new SimpleRelocator( "org/codehaus/plexus/util", shadedPattern, null, Arrays.asList( excludes ) ) );
 
         List resourceTransformers = new ArrayList();
 

Modified: maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java?rev=983242&r1=983241&r2=983242&view=diff
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java (original)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java Sat Aug  7 15:16:48 2010
@@ -81,7 +81,7 @@ public class ShadeMojoTest
         set.add( new File( getBasedir(), "src/test/jars/test-artifact-1.0-SNAPSHOT.jar" ) );
 
         List relocators = new ArrayList();
-        relocators.add( new SimpleRelocator( "org.codehaus.plexus.util", "hidden", Arrays.asList( new String[] {
+        relocators.add( new SimpleRelocator( "org.codehaus.plexus.util", "hidden", null, Arrays.asList( new String[] {
             "org.codehaus.plexus.util.xml.Xpp3Dom", "org.codehaus.plexus.util.xml.pull.*" } ) ) );
 
         List resourceTransformers = new ArrayList();
@@ -193,7 +193,7 @@ public class ShadeMojoTest
 
         List relocators = new ArrayList();
 
-        relocators.add( new SimpleRelocator( "org/codehaus/plexus/util", shadedPattern, Arrays.asList(
+        relocators.add( new SimpleRelocator( "org/codehaus/plexus/util", shadedPattern, null, Arrays.asList(
             new String[]{"org/codehaus/plexus/util/xml/Xpp3Dom", "org/codehaus/plexus/util/xml/pull.*"} ) ) );
 
         List resourceTransformers = new ArrayList();

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=983242&r1=983241&r2=983242&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 Aug  7 15:16:48 2010
@@ -18,7 +18,7 @@ public class SimpleRelocatorTest
     {
         SimpleRelocator relocator;
 
-        relocator = new SimpleRelocator( "org.foo", null, null );
+        relocator = new SimpleRelocator( "org.foo", null, null, null );
         assertEquals( true, relocator.canRelocatePath( "org/foo/Class" ) );
         assertEquals( true, relocator.canRelocatePath( "org/foo/Class.class" ) );
         assertEquals( true, relocator.canRelocatePath( "org/foo/bar/Class" ) );
@@ -29,7 +29,7 @@ public class SimpleRelocatorTest
         assertEquals( false, relocator.canRelocatePath( "org/Foo/Class.class" ) );
 
         relocator =
-            new SimpleRelocator( "org.foo", null, Arrays.asList( new String[] { "org.foo.Excluded", "org.foo.public.*",
+            new SimpleRelocator( "org.foo", null, null, Arrays.asList( new String[] { "org.foo.Excluded", "org.foo.public.*",
                 "org.foo.Public*Stuff" } ) );
         assertEquals( true, relocator.canRelocatePath( "org/foo/Class" ) );
         assertEquals( true, relocator.canRelocatePath( "org/foo/Class.class" ) );
@@ -52,14 +52,14 @@ public class SimpleRelocatorTest
     {
         SimpleRelocator relocator;
 
-        relocator = new SimpleRelocator( "org.foo", null, null );
+        relocator = new SimpleRelocator( "org.foo", null, null, null );
         assertEquals( true, relocator.canRelocateClass( "org.foo.Class" ) );
         assertEquals( true, relocator.canRelocateClass( "org.foo.bar.Class" ) );
         assertEquals( false, relocator.canRelocateClass( "com.foo.bar.Class" ) );
         assertEquals( false, relocator.canRelocateClass( "org.Foo.Class" ) );
 
         relocator =
-            new SimpleRelocator( "org.foo", null, Arrays.asList( new String[] { "org.foo.Excluded", "org.foo.public.*",
+            new SimpleRelocator( "org.foo", null, null, Arrays.asList( new String[] { "org.foo.Excluded", "org.foo.public.*",
                 "org.foo.Public*Stuff" } ) );
         assertEquals( true, relocator.canRelocateClass( "org.foo.Class" ) );
         assertEquals( true, relocator.canRelocateClass( "org.foo.excluded" ) );
@@ -76,10 +76,10 @@ public class SimpleRelocatorTest
     {
         SimpleRelocator relocator;
 
-        relocator = new SimpleRelocator( "org.foo", null, null );
+        relocator = new SimpleRelocator( "org.foo", null, null, null );
         assertEquals( "hidden/org/foo/bar/Class.class", relocator.relocatePath( "org/foo/bar/Class.class" ) );
 
-        relocator = new SimpleRelocator( "org.foo", "private.stuff", null );
+        relocator = new SimpleRelocator( "org.foo", "private.stuff", null, null );
         assertEquals( "private/stuff/bar/Class.class", relocator.relocatePath( "org/foo/bar/Class.class" ) );
     }
 
@@ -87,10 +87,10 @@ public class SimpleRelocatorTest
     {
         SimpleRelocator relocator;
 
-        relocator = new SimpleRelocator( "org.foo", null, null );
+        relocator = new SimpleRelocator( "org.foo", null, null, null );
         assertEquals( "hidden.org.foo.bar.Class", relocator.relocateClass( "org.foo.bar.Class" ) );
 
-        relocator = new SimpleRelocator( "org.foo", "private.stuff", null );
+        relocator = new SimpleRelocator( "org.foo", "private.stuff", null, null );
         assertEquals( "private.stuff.bar.Class", relocator.relocateClass( "org.foo.bar.Class" ) );
     }