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>