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
* <relocation>
* <pattern>org.apache</pattern>
* <shadedPattern>hidden.org.apache</shadedPattern>
+ * <includes>
+ * <include>org.apache.maven.*</include>
+ * </includes>
* <excludes>
- * <exclude>org.apache.ExcludedClass</exclude>
+ * <exclude>org.apache.maven.Public*</exclude>
* </excludes>
* </relocation>
* </relocations>
* </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" ) );
}